Azure函数 - ICollector绑定不在结果function.json

时间:2017-11-14 11:44:12

标签: azure azure-functions azure-webjobs

我有以下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文档中描述的属性以及我的示例代码中完成的,但错误消息表明不是这样。

1 个答案:

答案 0 :(得分:7)

  1. 您应该使用属性修饰参数,而不是返回值:

    public static async Task Run(
        [TimerTrigger("* * * * * *")]TimerInfo myTimer,
        [Queue("my-queue", Connection = "MyStg")] IAsyncCollector<AudienceMessage> output)
    
  2. 预计function.json中不会出现输出绑定。属性定义的绑定不会传输到生成的function.json。他们仍然会工作,不用担心。