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

Azure将v2 BrokeredMessage用作ServiceBus的输入

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

    我要在Azure函数的签名中包含BrokeredMessage。

    public static async Task WhatIsTheTime(
                [ServiceBusTrigger(queueName: QueueName, Connection = ConnectionStringKey)]
                BrokeredMessage message, 
                ILogger log)
    {
         var myObj = message.GetBody<MyType>();
         // whatever
    }
    

    主要是因为它包含了大量方便的元数据,而且每次我决定想要一些不同的东西时,我都需要更改签名。另外,正如上面的例子所示,获得尸体非常容易。

    然而,似乎无论什么开箱即用的设置,我对这个想法是愤怒的。它要我做的是:

        public static async Task WhatIsTheTime(
                [ServiceBusTrigger(queueName: QueueName, Connection = ConnectionStringKey)]
                MyType myObj, 
                ILogger log)
    {
        // whatever
    }
    

    为我迈出第一步。
    如果我这么做,一切都会很开心,我们都可以回家了。但是我不想这样,我宁愿完整的消息。

    不管我如何包装正文的内容,在我的代码执行之前它都失败得很惨,给了我很多不同的错误(取决于我是如何包装的),但很明显;这个:

    Exception while executing function: Exception binding parameter Expecting element 'BrokeredMessage'   
    

    它试图将BrokeredMessage的主体反序列化为BrokeredMessage!

    3 回复  |  直到 7 年前
        1
  •  3
  •   MarkXA    7 年前
        2
  •  3
  •   Arunprabhu    7 年前

    Here Meessage 而不是 BrokeredMessage .

        3
  •  0
  •   Sean Feldman    7 年前

    这跟坏掉的东西有关 wire compatibility issue . 如果您的原始代码正在构造 BrokeredMessage 使用接受对象而不是流的构造函数,这将导致新的.NET标准客户端失败。除非使用扩展方法来检索主体,否则我认为Azure函数不会这样做。

    如果您有更新和重新部署发件人/发布者的选项,您可以 能够 通过发送 MemoryStream

    推荐文章