【问题标题】:Azure Functions dynamic input / output binding based on Service Bus trigger message contentAzure Functions 基于服务总线触发消息内容的动态输入/输出绑定
【发布时间】:2019-07-30 01:02:22
【问题描述】:

我正在尝试创建具有多个绑定的 Azure Function 2.0。该函数由 Azure Service Bus Queue 消息触发,我想根据此消息内容阅读 Blob。我已经尝试过以下代码:

public static class Functions
{
    [FunctionName(nameof(MyFunctionName))]
    public static async Task MyFunctionName(
        [ServiceBusTrigger(Consts.QueueName, Connection = Consts.ServiceBusConnection)] string message,
        [Blob("container/{message}-xyz.txt", FileAccess.Read, Connection = "StorageConnName")] string blobContent
    )
    {
        // processing the blob content
    }
}

但我收到以下错误:

Microsoft.Azure.WebJobs.Host:索引方法“MyFunctionName”出错。 Microsoft.Azure.WebJobs.Host:无法解析绑定参数“消息”。绑定表达式必须映射到触发器提供的值或触发器绑定到的值的属性,或者必须是系统绑定表达式(例如 sys.randguid、sys.utcnow 等)。

我在某处看到可以使用动态绑定,但可能无法基于另一个输入绑定创建输入绑定。有什么想法吗?

【问题讨论】:

    标签: azure azure-functions azure-servicebus-queues


    【解决方案1】:

    我真的很惊讶这不起作用。绑定有很多怪癖。请试一试:

    public static class Functions
    {
        [FunctionName(nameof(MyFunctionName))]
        public static async Task MyFunctionName(
            [ServiceBusTrigger(Consts.QueueName, Connection = Consts.ServiceBusConnection)] MyConcreteMessage message,
            [Blob("container/{message}-xyz.txt", FileAccess.Read, Connection = "StorageConnName")] string blobContent
        )
        {
            // processing the blob content
        }
    }
    

    创建一个 DTO:

    public class MyConcreteMessage 
    {
        public string message {get;set;}
    }
    

    确保您在服务总线中使用的消息是这样的:

    {
      "message": "MyAwesomeFile"
    }
    

    它现在应该能够读取您的绑定 container/{message}-xyz.txt 并识别出 message

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-17
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2022-06-10
      • 2022-06-17
      相关资源
      最近更新 更多