C# Azure WebJobs队列触发器未触发

C# Azure WebJobs队列触发器未触发,c#,azure,azure-storage,azure-webjobs,azure-queues,C#,Azure,Azure Storage,Azure Webjobs,Azure Queues,我正在试图找出我在Azure WebJobs QueueTrigger方法方面做错了什么,该方法应该从Azure存储队列触发 我已经阅读了一些文档(如博客文章/msdn文章)。但我还是不清楚 主要问题/误解方面: Azure存储控制台应用程序app.config或Windows Azure配置(门户)的连接字符串的名称应该是什么。到目前为止,我在两个地方都设置了以下名称。 AzureJobstorage AzureWebJobs存储 AzureJobsRuntime AzureJobsDash

我正在试图找出我在Azure WebJobs QueueTrigger方法方面做错了什么,该方法应该从Azure存储队列触发

我已经阅读了一些文档(如博客文章/msdn文章)。但我还是不清楚

主要问题/误解方面:

Azure存储控制台应用程序app.config或Windows Azure配置(门户)的连接字符串的名称应该是什么。到目前为止,我在两个地方都设置了以下名称。

  • AzureJobstorage
  • AzureWebJobs存储
  • AzureJobsRuntime
  • AzureJobsDashboard
  • AzureJobsData
这是我的WebJobs控制台应用程序代码

static void Main()
{
    JobHost host = new JobHost();
    host.RunAndBlock();
}

public static void CreateLeague([QueueTrigger("temp")] string msg)
{
    var task = JsonConvert.DeserializeObject<QueueTask>(msg);

    if (task.TaskType == QueueTask.TaskTypes.Pdf)
      RenderPdf(task.Id);
}

执行此代码,并将队列添加到我的存储帐户。但是他们没有“出列”,也没有从WebJobs中读取内容。

嗯,WebJobs类必须是公共的

using Microsoft.Azure.WebJobs;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Newtonsoft.Json;
using Proceed.Common;
using System;
using System.Configuration;
using System.IO;

public class WebJobsTask {
  public static void Main()
  {
      JobHost host = new JobHost();
      host.RunAndBlock();
  }

  public static void CreateLeague([QueueTrigger("temp")] string msg)
  {
    var task = JsonConvert.DeserializeObject<QueueTask>(msg);

    if (task.TaskType == QueueTask.TaskTypes.Pdf)
      RenderPdf(task.Id);
  }
}
使用Microsoft.Azure.WebJobs;
使用Microsoft.WindowsAzure.Storage;
使用Microsoft.WindowsAzure.Storage.Blob;
使用Newtonsoft.Json;
使用procedure.Common;
使用制度;
使用系统配置;
使用System.IO;
公共类WebJobsTask{
公共静态void Main()
{
JobHost主机=新的JobHost();
host.RunAndBlock();
}
public static void CreateLeague([QueueTrigger(“temp”)]string msg)
{
var task=JsonConvert.DeserializeObject(msg);
if(task.TaskType==QueueTask.TaskTypes.Pdf)
RenderPdf(task.Id);
}
}
还找到了一种快速浏览我的队列的方法:

  • 您可以使用VS中的服务器资源管理器来浏览存储队列的内容
  • 如果没有工作要做,WebJobs SDK的队列触发器将以指数形式退出。从将消息放入队列到提取消息之间可能存在延迟。您可以通过
    JobHostConfiguration.Queues.MaxPollingInterval
    属性配置最大回退
  • 对于最新的SDK,您需要两个存储连接字符串
    azurewebjobstorage
    AzureWebJobsDashboard

  • 这是一个获取更多资源的好地方:

    在我的例子中,我假设QueueTrigger指的是服务总线队列,而不是Azure队列,实际上我需要使用
    ServiceBusTrigger
    ,我也遇到了同样的问题。还看到了在某些地方提到的ServiceBustigger,但在我添加Microsoft.Azure.WebJobs.ServiceBus nuget包之前,该属性从未解析!谈论文档中的不清晰。事实上,有点混乱。很高兴你发布了这个答案。不敢相信studio中的代码模板会将类默认为private。
    using Microsoft.Azure.WebJobs;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Blob;
    using Newtonsoft.Json;
    using Proceed.Common;
    using System;
    using System.Configuration;
    using System.IO;
    
    public class WebJobsTask {
      public static void Main()
      {
          JobHost host = new JobHost();
          host.RunAndBlock();
      }
    
      public static void CreateLeague([QueueTrigger("temp")] string msg)
      {
        var task = JsonConvert.DeserializeObject<QueueTask>(msg);
    
        if (task.TaskType == QueueTask.TaskTypes.Pdf)
          RenderPdf(task.Id);
      }
    }