代码之家  ›  专栏  ›  技术社区  ›  TutuGeorge

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

  •  0
  • TutuGeorge  · 技术社区  · 7 年前

    我正在尝试创建一个带有ServiceBus队列触发器和其他输入数据的Azure函数。 也就是说,函数应该在blob更新时触发,并将blob名称作为输入。我想要一个Blob数据作为额外的输入。

    函数。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 回复  |  直到 7 年前
        1
  •  1
  •   Mikhail Shilkov    7 年前

    可以从触发器参数模板化输入绑定。所以 name 应该是服务总线消息负载的一部分。您可以实现以下功能:

    public class MyQueueItem
    {
        public string name { get; set; }
    }
    
    public static void Run(MyQueueItem myQueueItem, Stream inputBlob, TraceWriter log)
    {}
    

    请注意,此功能的唯一触发器是服务总线消息。该功能不会由blob更新触发,除非您的其他代码为系统中的每个更新发送带有blob名称的服务总线消息。