Webjobs 是可以在 Azure 上运行的任何可执行文件(因此 .NET 程序可以正常运行)。触发机制是特定的,不能使用 SQL Azure,但您可以在 Web 作业本身的可执行代码中运行 SQL Azure 。
例如,此 webjob 在对 SQL Azure 数据库执行查询并将结果写入配置的存储容器中的文本文件之前,等待“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();
}
}
}
}
当然,最好将连接字符串、存储容器名称等存储在托管 Web 作业的网站的配置设置中(您可以在“配置”选项卡的“应用程序设置”和“连接字符串”部分中执行此操作' 在 azure 门户中,因此您在网站上可访问的文件中没有任何设置)。