【问题标题】:SQL Database access from a WebJob in Azure从 Azure 中的 Web 作业访问 SQL 数据库
【发布时间】:2014-07-25 07:44:51
【问题描述】:

我计划使用 WebJobs 作为 NServiceBus 的轻量级替代品,但想首先验证例行 SQL Azure 数据库查询是否可以通过触发的 WebJob 处理程序进行?我的数据库访问将通过 EntityFrameworks。

这个 SO 线程表明 WebJobs 不支持 SQL 数据库,但我希望这只是意味着 SQL 数据库不能用作 WebJob 处理程序的触发机制?

Azure Web Job - How to connect to an Azure MS SQL Database?

我还没有找到发出 SQL 数据库查询的 WebJob 示例,但由于 WebJob 可以访问与主网站相同的应用程序配置,我认为可以提供数据库连接详细信息?

【问题讨论】:

    标签: azure-sql-database azure-webjobs


    【解决方案1】:

    Webjobs 是可以在 Azure 上运行的任何可执行文件(因此 .NET 程序可以正常运行)。 触发机制是特定的,不能使用 SQL Azure,但您可以在可执行代码中运行 SQL Azure在网络作业本身中

    例如,此 webjob 等待“testwebjobsqueue”上的消息“web-jobs-testing-sql”,然后在 SQL Azure 数据库上执行查询并将结果写入配置的存储容器中的文本文件:

    namespace AzureWebJobs
    {
        class AzureSqlTest
        {
            static void Main()
            {
                JobHost host = new JobHost();
                host.RunAndBlock(); 
            }
    
            public static void SyndicateFiles([QueueInput("testwebjobsqueue")] string inputText, 
                                [BlobOutput("temp/WebJobs-log.txt")]TextWriter writer)
            {
                if (!inputText.StartsWith("web-jobs-testing-"))  
                    return;
    
                writer.WriteLine(String.Format("Starting to do processing for " + inputText + " at {0}", DateTime.Now.ToShortTimeString()));
                string storageContainerName = ConfigurationManager.AppSettings["StorageContainerNameTemp"].ToLower();
    
                AzureStorageUtils.ConfigureStorage(storageContainerName);
    
                SQLTest sqlTest = new SQLTest();
                sqlTest.RunSqlQuery(inputText, writer);
                writer.WriteLine(String.Format("Syndication Finished at {0}", DateTime.Now.ToShortTimeString()));
            }
        }
    
    
        class SQLTest
        {
            public SQLTest()
            {
    
            }
    
            public void RunSqlQuery(string queueMessage, TextWriter writer)
            {
                if (queueMessage == "web-jobs-testing-sql")
                {
                    string connectionString = "Server=tcp:YourDatabaseServerName.database.windows.net,1433;Database=YourDatabaseName;User ID=YourSQLAzureUserID;Password=YourStrongPassword;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;";
                    SqlConnection sqlConnection1 = new SqlConnection(connectionString);
                    SqlCommand cmd = new SqlCommand();
    
    
                    cmd.CommandText = "SELECT * FROM Users";
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = sqlConnection1;
    
                    sqlConnection1.Open();
    
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        // Data is accessible through the DataReader object here.
                        while (reader.Read())
                        {
                            writer.WriteLine(reader.GetValue(1).ToString());
                        }
                        reader.Close();
                    }
                    sqlConnection1.Close();
                }
            }
        }
    }   
    

    当然,最好将连接字符串、存储容器名称等存储在托管 Web 作业的网站的配置设置中(您可以在azure 门户中的“配置选项卡”,因此您在网站上可访问的文件中没有任何设置)。

    【讨论】:

    • 感谢您提供广泛的代码示例,我希望得到肯定的确认,因为我希望获得一个运行我的第一个 Azure 应用程序的试点示例,而无需配置 Web 和辅助角色的额外负担(加上相关成本) )。我不应该批评这些文档,因为 WebJobs 处于测试阶段,但我觉得有太多的重点展示了如何配置 WebJobs,而不是如何调用以及在 WebJob 中可以做什么。
    • 我同意,但有一些不错的例子。我发布的内容基于我的一项生产工作(没有 SQL)。现在我只是在预览中保持简单,直到添加更多功能,但现在可以完成工作。我会为你挖掘更多的链接,稍后再在这里发布。
    • 有没有办法知道运行 Web 作业的机器的 IP 地址?原因是我打算访问一个受 IP 过滤保护的 SQL Azure 数据库。
    • @Shankar 是的,WebJobs 在您的 Azure Web App 实例上运行,因此假设您没有使用共享实例或自动缩放,您可以在 Properties->Outbound IP Addresses 下找到 IP 地址。
    【解决方案2】:

    我们还没有 SqlAzure 的触发器。我们会考虑通过开放可扩展性的方式来开放它,以允许您根据不同的事件触发函数,例如 SQL Azure、文件系统观察程序等。 您可以共享可以在您的站点和网络作业之间共享的 ConnectionString。以下帖子捕获了这个Use connectionstring in WebJob on Azure

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多