Azure功能服务总线输出绑定出错

时间:2017-09-01 18:12:30

标签: azure azureservicebus azure-functions

我遇到Azure Service Bus输出绑定的问题,我不确定如何继续。我没有找到类似问题的运气,所以如果这是重复的话我会道歉。

我正在尝试使用本地VS 2017开发过程,因此应自动生成function.json绑定。功能签名如下:

  [FunctionName("RequestNewPaladinInvitation")]
  public static HttpResponseMessage Run(
     [HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequestMessage req,
     [ServiceBus("thequeue")] ICollector<Invitation> invitationOutputQueue,
     TraceWriter log)
  {
     //Do some stuff and write to the queue
     invitationOutputQueue.Add(invite);
  }

在本地运行该函数时出现以下错误。

  

Microsoft.Azure.WebJobs.Host:错误索引方法   'RequestNewPaladinInvitation.Run'。 Microsoft.Azure.WebJobs.Host:   无法绑定参数'invitationOutputQueue'来键入ICollector`1。   确保绑定支持参数Type。如果你是   使用绑定扩展(例如ServiceBus,Timers等)确保   你已经为你的扩展调用了注册方法   启动代码(例如config.UseServiceBus(),config.UseTimers()等)。   [9/1/2017 5:42:49 PM]错误索引方法   'RequestNewPaladinInvitation.Run'

我的host.json和local.settings.json都定义如下:

{
   "IsEncrypted": false,
   "Values": {
      "AzureWebJobsStorage": "<MyStorageAccountInfo>",
      "AzureWebJobsDashboard": "<MyDashboardInfo>",
      "AzureWebJobsServiceBus": "<MyServiceBusConnectionString>"
   }
}

令人印象深刻的是,定义AzureWebJobsServiceBus值将使整个功能应用程序中的任何ServiceBus绑定成为默认的ServiceBusAccount。

我还尝试将ServiceBus绑定显式指向具有以下备用属性[ServiceBus("createpaladininvitation",Connection = "ServiceBus")]的帐户的连接字符串。我对该约定的理解是不应包含该属性的 AzureWebJobs 部分。万一我误解了,我也试过[ServiceBus("createpaladininvitation",Connection = "AzureWebJobsServiceBus")]。我甚至尝试使用以下属性[ServiceBusAccount("ServiceBus")]来装饰方法和参数。我也尝试了与ServiceBus属性的Connection参数相同的变体。

在所有情况下,我得到相同的function.json输出,它显示没有为ServiceBus输出绑定生成绑定。

这是function.json:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "httpTrigger",
      "methods": [
        "post"
      ],
      "authLevel": "anonymous",
      "name": "req"
    }
  ],
  "disabled": false,
  "scriptFile": "..\\bin\\AzureFunctionsPoc.dll",
  "entryPoint": "AzureFunctionsPoc.RequestNewPaladinInvitation.Run"
}

感觉我错过了一些明显的东西。

[更新]

当我试图继续弄清楚发生了什么时,我在本地运行了该函数并编辑了生成的function.json文件,并添加了我认为应该生成的绑定。生成的手动编辑的function.json是:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "httpTrigger",
      "methods": [
        "post"
      ],
      "authLevel": "anonymous",
      "name": "req"
    },
    {
      "type": "serviceBus",
      "name": "invitationOutputQueue",
      "queueName": "createpaladininvitation",
      "connection": "ServiceBus",
      "direction": "out"
    }
  ],
  "disabled": false,
  "scriptFile": "..\\bin\\AzureFunctionsPoc.dll",
  "entryPoint": "AzureFunctionsPoc.RequestNewPaladinInvitation.Run"
}

通过这些编辑,该方法完全按预期工作。

这更像是我缺少的语法或惯例问题,或者是工具错误。

1 个答案:

答案 0 :(得分:3)

目前在ServiceBus输出触发器方面存在一个出色的工具错误。如果您部署&#39;它将起作用。您的应用程序是Azure功能,只是不在本地使用工具

请在此处查看相关的GitHub问题:Service Bus output binding issue

在这里:Latest v1.0.0 not working with ServiceBus. alpha 6 still works.

  

这与延迟加载有关。我们没有拿起服务总线扩展,因此索引错误。 (天青/天青-webjobs-SDK-脚本#1637)

     

原因是ServiceBus扩展名与其他扩展名不同。我们希望扩展有一个公共无参数配置对象,它实现了IExtensionConfigProvider。

     

SB是内部的(https://github.com/Azure/azure-webjobs-sdk/blob/663a508e8a851629c26a51e7de3af36629dfd120/src/Microsoft.Azure.WebJobs.ServiceBus/Config/ServiceBusExtensionConfig.cs#L17)因此我们对ExportedTypes的扫描错过了它(请参阅https://github.com/Azure/azure-webjobs-sdk-script/blob/b1445485807bb190ba0716af1a8dc81a864b5228/src/WebJobs.Script/Host/ScriptHost.cs#L735)。   SB的配置没有无参数的ctor,因此Activator.createInstance调用也会失败。   此修补程序(我们对脚本运行时所做的)Azure / azure-webjobs-sdk-script#1804将修复它;但这需要拉到CLI。