我遇到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"
}
通过这些编辑,该方法完全按预期工作。
这更像是我缺少的语法或惯例问题,或者是工具错误。
答案 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。