我有以下C#功能代码:
[FunctionName("UpdateCohortsByTenantFunction")]
[return: Queue("my-queue", Connection = "MyStorage")]
//note - I have tried both method decoration and parameter decoration
public static async Task Run([TimerTrigger("* * * * * *")]TimerInfo myTimer, IAsyncCollector<AudienceMessage> output)
{
//some logic
foreach (var audience in audiences)
{
await output.AddAsync(new AudienceMessage
{
AudienceId = audience.Id,
TenantId = tenant.Id
});
}
}
产生以下function.json:
{
"generatedBy": "Microsoft.NET.Sdk.Functions.Generator-1.0.6",
"configurationSource": "attributes",
"bindings": [
{
"type": "timerTrigger",
"schedule": "* * * * * *",
"useMonitor": true,
"runOnStartup": false,
"name": "myTimer"
}
],
"disabled": false,
"scriptFile": "../bin/MyApp.App.Tasks.Functions.dll",
"entryPoint": "MyApp.App.Tasks.Functions.UpdateCohortsByTenantFunction.Run"
}
根据文档here,json输出应该包含一个带有“out”方向的队列绑定。即:
{
"type": "queue",
"direction": "out",
"name": "$return",
"queueName": "outqueue",
"connection": "MyStorageConnectionAppSetting",
}
当我尝试通过npm工具运行队列时(配置描述为here),我收到以下错误:
运行:Microsoft.Azure.WebJobs.Host:错误索引方法'UpdateCohortsByTenantFunction.Run'。 Microsoft.Azure.WebJobs.Host:无法将参数'output'绑定到类型IAsyncCollector`1。确保绑定支持参数Type。如果您正在使用绑定扩展(例如ServiceBus,Timers等),请确保您已在启动代码中调用扩展的注册方法(例如config.UseServiceBus(),config.UseTimers()等)。
该文档不包含通过启动代码进行绑定的引用。我的理解是,这是通过上面链接的Microsoft文档中描述的属性以及我的示例代码中完成的,但错误消息表明不是这样。
答案 0 :(得分:7)
您应该使用属性修饰参数,而不是返回值:
public static async Task Run(
[TimerTrigger("* * * * * *")]TimerInfo myTimer,
[Queue("my-queue", Connection = "MyStg")] IAsyncCollector<AudienceMessage> output)
预计function.json
中不会出现输出绑定。属性定义的绑定不会传输到生成的function.json
。他们仍然会工作,不用担心。