我创建了一个Azure WebJob,如以下脚本中所示,该项目从Azure存储队列中取出项目,然后将其存储到Azure表中。该过程在1或2秒内完成运行,但它在一分钟内仅运行几次(偶尔在大约10分钟内停止运行)。总的来说,它不能很好地运作。
我错过了什么?也许我混合了触发器工作和连续工作,但很难找到合适的样品。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("started at {0}", DateTime.Now.ToString("s"));
// Continuous job should have infinite loop.
while(true){
var host = new JobHost();
host.RunAndBlock();
}
}
public static void ProcessQueueMessage([QueueInput("blogqueue")] string json)
{
var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings ["StorageConnectionString"].ConnectionString);
var tableClient = storageAccount.CreateCloudTableClient();
// Store it to Azure Table Storage
// omitted...
Console.WriteLine("Received JSON: {0}", json);
}
答案 0 :(得分:6)
一些评论:
while(true)
声明。 RunAndBlock
内部已经有一个while循环,它将阻止它。以下是绑定到存储帐户的示例:
public static void ProcessQueueMessage([QueueInput("blogqueue")] string json, CloudStorageAccount)
{
...
}
这是一个疯狂的猜测但是,从您的代码中,似乎存储连接字符串存储在配置文件中的StorageConnectionString
中。 JobHost
要求(1)运行时连接字符串和数据存储在AzureJobsData
和AzureJobsRuntime
中(如here所述)或(2)传递连接字符串作为JobHost
构造函数的参数。我认为这就是崩溃的原因。
答案 1 :(得分:3)
只需在ProjectName / Properties / webjob-publish-settings.json
中更改发布设置即可"runMode": "OnDemand" => "runMode": "Continuous"
答案 2 :(得分:2)
要使连续的WebJob正常工作,您需要在网站的配置选项卡中启用“始终开启”。
“Always On”功能仅适用于Basic / Standard网站计划,如果未启用,WebJob可能会在一段时间后停止运行。