我正在跟踪针对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放在签名中使此操作变得容易。我是否缺少配置选项或其他?
答案 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能够处理它。