Azure函数具有附加的输入数据参数绑定

时间:2017-11-14 04:38:36

标签: c# azure azure-functions serverless

我正在尝试使用ServiceBus队列触发器和其他输入数据创建Azure功能。 这是函数应该在blob更新时触发,将blob名称作为输入。我希望将Blob数据作为附加输入。

创建的function.json如下所示。

{
  "bindings": [
    {
      "name": "myQueueItem",
      "type": "serviceBusTrigger",
      "direction": "in",
      "queueName": "afqueue",
      "connection": "CONNECTIONSTRING",
      "accessRights": "Listen"
    },
    {
      "type": "blob",
      "name": "inputBlob",
      "path": "samplecontainer/{name}",
      "connection": "AzureWebJobsDashboard",
      "direction": "in"
    }
  ],
  "disabled": false
}

定义的函数签名如下。

public static void Run(string myQueueItem, Stream inputBlob, TraceWriter log){}

这会产生如下错误

Function ($ServiceBusQueueTriggerCSharp1) Error: Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.ServiceBusQueueTriggerCSharp1'. Microsoft.Azure.WebJobs.Host: No binding parameter exists for 'name'.

如果给出了硬编码值,则该函数正常工作,而不是参数{name}。 如何绑定到输入数据变量。

1 个答案:

答案 0 :(得分:1)

输入绑定可以通过触发参数进行模板化。因此,name应该是您的服务总线消息有效负载的一部分。你可以实现这样的功能:

public class MyQueueItem
{
    public string name { get; set; }
}

public static void Run(MyQueueItem myQueueItem, Stream inputBlob, TraceWriter log)
{}

请注意,此功能的唯一触发器是Service Bus消息。除非您的某些其他代码为系统中的每个更新发送带有blob名称的Service Bus消息,否则该函数不会被blob更新触发。