微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

azure-sql-database – 从Azure中的WebJob访问SQL数据库

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

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

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

我没有找到发布sql数据库查询的WebJob示例,但由于WebJob可以访问与主WebSite相同的应用程序配置,我假设可以使用数据库连接详细信息?

解决方法

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

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

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();
            }
        }
    }
}

当然最好将您的连接字符串,存储容器名称等存储在托管webjob的网站的配置设置中(您可以在’配置选项卡’的’应用程序设置’和’连接字符串’部分中执行此操作’在天蓝色的门户网站中,因此您无法在网站上访问的文件中进行任何设置.

原文地址:https://www.jb51.cc/mssql/83548.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐