我遇到Azure服务总线输出绑定问题,我不确定如何继续。我没有找到类似的问题,所以我很抱歉,如果这是重复的。Azure功能服务总线输出绑定错误
我想使用本地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,定时器等),确保 你已经调用了 启动代码中的扩展的注册方法(例如config.UseServiceBus(),config.UseTimers )等)。 [2017年9月1日下午5时42分49秒]错误索引方法 'RequestNewPaladinInvitation.Run'
我的两个host.json和local.settings.json定义如下:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<MyStorageAccountInfo>",
"AzureWebJobsDashboard": "<MyDashboardInfo>",
"AzureWebJobsServiceBus": "<MyServiceBusConnectionString>"
}
}
我深深地感到,定义AzureWebJobsServiceBus
值会使整个函数应用程序中的任何ServiceBus绑定的默认ServiceBusAccount成为可能。
我也尝试明确地指出ServiceBus绑定到账户的连接字符串,并使用以下替代属性[ServiceBus("createpaladininvitation",Connection = "ServiceBus")]
。我对该惯例的理解是,不应该包含属性的一部分。以防万一我误解了,我也试过[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"
}
通过这些编辑,该方法的工作原理与预期完全相同。
这种感觉更像是我缺少的语法或约定问题或工具错误。
似乎与[此问题](https://stackoverflow.com/questions/45986719/using-azure-functions-in-vs2017-cannot-bind-to-servicebus-queue-as-an-output ) – Mikhail
@Mikhail - 我快速浏览了你链接的问题。它看起来很相似。但是,与这个问题不同的是,在我的情况下,更改Trigger类型似乎没有任何区别。但是,谢谢你指出。 –