Azure Functions v2 BrokeredMessage作为ServiceBus的输入

时间:2018-10-04 15:35:27

标签: azure-functions azureservicebus

我正在跟踪针对v1函数的示例,但我想从中获得的东西我无法在v2中进行复制。

我想要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
}

为我做第一步。
如果我这样做,一切都会很高兴,我们都可以回家。但是我不想要这个,我宁愿完整的BrokeredMessage。

无论我如何尝试打包正文的内容,它在执行代码之前都会惨败,给我带来许多不同的错误(取决于我对它的包装方式),但是却很明显;这个:

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

在尝试将BrokeredMessage的主体反序列化为BrokeredMessage的地方!
是什么赋予了?我读过一些文章,指出将BrokeredMessage放在签名中使此操作变得容易。我是否缺少配置选项或其他?

3 个答案:

答案 0 :(得分:2)

Azure Functions v2不再使用BrokeredMessage,而是使用Microsoft.Azure.ServiceBus.Message

答案 1 :(得分:1)

Here是来自Azure Functions Service Bus触发器文档的信息,其中说Azure Functions V2中的Service Bus消息支持Meessage而不是BrokeredMessage

答案 2 :(得分:0)

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

如果您可以选择更新和重新部署发件人/发布者,则可以可以通过发送带有字节的MemoryStream来更改构造消息的方式,以使Function能够处理它。