C# 如何从触发器队列消息中的特定字段动态绑定存储blob名称

C# 如何从触发器队列消息中的特定字段动态绑定存储blob名称,c#,azure-storage-blobs,azure-webjobssdk,C#,Azure Storage Blobs,Azure Webjobssdk,我正在尝试对触发的消息(队列)进行一些日志记录,这样,如果消息失败并且下次被webjob拾取,我就会记录一些信息,这样我就不会重做成功路径(比如在stage1之后向客户端发送消息)。 因此,我计划使用azure blob存储绑定来配置为输入和输出流。但为了做到这一点,我需要一个唯一的名称为blob。我在消息中有一个guid,我计划使用该guid从blob存储中读/写。 如何从队列消息中的guid字段动态配置此blob存储名称绑定。(我的消息非常大,我不想将整个消息用作blob存储名称) 如您所见

我正在尝试对触发的消息(队列)进行一些日志记录,这样,如果消息失败并且下次被webjob拾取,我就会记录一些信息,这样我就不会重做成功路径(比如在stage1之后向客户端发送消息)。 因此,我计划使用azure blob存储绑定来配置为输入和输出流。但为了做到这一点,我需要一个唯一的名称为blob。我在消息中有一个guid,我计划使用该guid从blob存储中读/写。 如何从队列消息中的guid字段动态配置此blob存储名称绑定。(我的消息非常大,我不想将整个消息用作blob存储名称)

如您所见,官方文档仅使用queueTrigger,它使用消息中的字符串作为blob名称。但我的信息看起来像这样大

public class TestMessageModel
{
  public Guid Id {get; set;}
  public int FromOrg {get; set;}
  public DateTime BatchDate {get; set;}
  public Payments[] payments {get; set;}  // this array is big (many items)
}
我不想用这么可笑的名字来命名。 如何在testMessage中使用Id

  • 添加与存储Blob的输出集成。并将路径值设置为容器名称

  • 在函数代码中,您可以直接使用容器,并创建具有特定名称的blob(您可以从队列消息中获得):
  • 最后,您将能够在目标容器中看到具有特定名称的blob

    供您参考的文件:
    谢谢@jack Jia。这很有帮助。但是对于webjob,我需要在正确绑定之前使用Blob

    public static void ProcessQueueMessage([QueueTrigger("%testQueue%")],
    TestMessageModel testMessage,
    [Blob("testStorage")] CloudBlobContainer blobContainer)
    {
       CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(testmessage.id+".txt");
    }
    

    在代码中使用CloudBlobContainer而不是Stream。以便您可以手动创建blockblob并设置其名称。回答补充道。请检查一下,太好了。我很高兴这有帮助。
    public static void ProcessQueueMessage([QueueTrigger("%testQueue%")],
    TestMessageModel testMessage,
    [Blob("testStorage")] CloudBlobContainer blobContainer)
    {
       CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(testmessage.id+".txt");
    }