Доступ к базе данных 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.