2

我创建了一个 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);
    }
4

3 回答 3

6

几点评论:

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

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

public static void ProcessQueueMessage([QueueInput("blogqueue")] string json, CloudStorageAccount) 
{
    ...
}

这是一个疯狂的猜测,但是从您的代码来看,存储连接字符串似乎存储在StorageConnectionString配置文件中。期望(1)运行时的连接字符串和JobHost要存储的数据(如这里所述)或(2)将连接字符串作为参数传递给构造函数。我认为这是崩溃的原因。AzureJobsDataAzureJobsRuntimeJobHost

于 2014-04-23T15:55:27.640 回答
4

只需更改 ProjectName/Properties/webjob-publish-settings.json 中的发布设置

"runMode": "OnDemand"  =>  "runMode": "Continuous"
于 2016-04-14T22:21:30.307 回答
2

要使连续的 WebJob 正常工作,您需要在网站的配置选项卡中启用“始终开启”。

“始终在线”功能仅适用于基本/标准网站计划,如果未启用,您的 WebJob 可能会在一段时间后关闭。

于 2014-04-23T18:14:40.177 回答