如何制作连续的WebJob?

You*_*jae 2 c# azure azure-webjobs

我创建了一个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);
    }
Run Code Online (Sandbox Code Playgroud)

Vic*_*aci 6

一些评论:

  1. 你不需要这个while(true)陈述.RunAndBlock已经有一个while循环,它将阻止那里.
  2. 您不需要手动检索表.您可以绑定到一个表所示样品中这里
  3. 您可以绑定到存储帐户,无需手动从配置文件中读取连接字符串并创建实例.

以下是绑定到存储帐户的示例:

public static void ProcessQueueMessage([QueueInput("blogqueue")] string json, CloudStorageAccount) 
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是一个疯狂的猜测,但是,从您的代码中,似乎存储连接字符串存储在StorageConnectionString配置文件中.的JobHost期望或者(1),用于运行时间和数据的连接字符串被存储在AzureJobsDataAzureJobsRuntime(如所描述的在这里)或(2)通过在连接字符串作为参数的JobHost构造函数.我认为这就是崩溃的原因.