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:错误索引方法 "请求新圣骑士邀请.运行"。Microsoft.Azure.WebJobs.Host: 无法将参数"邀请输出队列"绑定到类型 ICollector'1。 确保绑定支持参数 Type。如果你是 使用绑定扩展(例如服务总线、计时器等)确保 你已在 启动代码(例如配置。UseServiceBus(), config.使用计时器(),等等)。 [9/1/2017 5:42:49 PM]错误索引方法 "请求新圣骑士邀请.运行">

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

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

令我印象深刻的是,定义AzureWebJobsServiceBus值将使它成为整个函数应用中的任何服务总线绑定的默认服务总线帐户。

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

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

这是函数.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 文件,并添加了我认为应该生成的绑定。生成的手动编辑函数.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"
}

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

这感觉更像是我缺少的语法或约定问题,或者工具错误。

目前在服务总线输出触发器方面存在一个突出的工具错误。如果将应用"部署"到 Azure Functions,则它将起作用,只是不使用工具在本地部署

请在此处查看相关的 GitHub 问题:服务总线输出绑定问题

在这里:最新的 v1.0.0 不适用于 ServiceBus。 alpha 6 仍然有效。

这与延迟加载有关。我们没有选取服务总线扩展,因此会出现索引错误。(Azure/azure-webjobs-sdk-script#1637)

原因是服务总线扩展与其他扩展不同。我们希望扩展具有实现 IExtensionConfigProvider 的公共无参数配置对象。

SB 是内部的 (https://github.com/Azure/azure-webjobs-sdk/blob/663a508e8a851629c26a51e7de3af36629dfd120/src/Microsoft.Azure.WebJobs.ServiceBus/Config/ServiceBusExtensionConfig.cs#L17),所以我们对导出类型的扫描错过了它(见 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。

最新更新