Доступ к базе данных SQL из WebJob в Azure

Я планирую использовать WebJobs в качестве облегченного заменителя NServiceBus, но хотел сначала проверить, можно ли выполнять обычные запросы к базе данных SQL Azure из запускаемого обработчика WebJob? Доступ к моей базе данных будет через EntityFrameworks.

Этот поток SO указывает, что WebJobs не поддерживает базу данных SQL, но я надеюсь, что это просто означает, что базу данных SQL нельзя использовать в качестве механизма запуска для обработчика WebJob?

Веб-задание Azure. Как подключиться к базе данных Azure MS SQL?

Я не нашел образец WebJob, который выдает запросы к базе данных SQL, но, поскольку у WebJob есть доступ к той же конфигурации приложения, что и к основному сайту, я предполагаю, что сведения о подключении к базе данных можно сделать доступными?

2 ответа

Решение

Веб-задания - это любой исполняемый файл, который может работать в Azure (поэтому программы.NET будут работать нормально). Механизм запуска является специфическим, и НЕ МОЖЕТ использовать SQL Azure, но вы можете запустить SQL Azure в своем исполняемом коде ВНУТРИ самого веб-задания.

Например, этот веб-задание ожидает сообщения "web-jobs-testing-sql" в "testwebjobsqueue" перед выполнением запроса к базе данных 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();
            }
        }
    }
}   

Конечно, лучше всего хранить строку подключения, имена контейнеров хранения и т. Д. В настройках конфигурации вашего веб-сайта, на котором размещается веб-задание (это можно сделать в разделах "Настройки приложения" и "Строки подключения" на вкладке "Настройка"). на портале Azure, чтобы у вас не было настроек в файлах, доступных на веб-сайте).

У нас еще нет триггеров для SqlAzure. Это то, что мы хотели бы открыть, открывая расширяемость, позволяющую вам запускать функции на основе различных событий, таких как SQL Azure, наблюдатели файловой системы и т. Д. Вы можете поделиться строкой ConnectionString, которую вы можете использовать совместно для своего сайта и веб-задания. В следующем сообщении описывается эта строка подключения в WebJob в Azure.

Другие вопросы по тегам