我有模拟的天蓝色Web作业,它定期将BrokeredMessage
推送到服务总线主题,像这样
public void Simulate(
[TimerTrigger("0 */30 * * * *", RunOnStartup = true)]
TimerInfo timerInfo,
[ServiceBus("%topic%")]
out BrokeredMessage message)
{
message = new BrokeredMessage(
new AwesomeContract()
{
});
}
在azure函数V2中,我试图使用Message
类来使用它。
public static void Integrate(
[ServiceBusTrigger(
"%topic%",
"%subscribtion%",
Connection = "ServiceBusConnection")] Message message,
TraceWriter log,
ExecutionContext context)
{
try
{
message.GetBody<AwesomeContract>();
}
}
在GetBody<>
上,我收到DataContractSerialization
异常“ 将类型的对象反序列化时出错。输入源的格式不正确。”
天蓝色函数v1和v2是否兼容BrokeredMessage
和Message
?有什么建议吗?
答案 0 :(得分:1)
BrokeredMessage
是WindowsAzure.ServiceBus库中的消息对象,其中Message
是Microsoft.Azure.ServiceBus库中的对象。
尽管这些库之间的对象类型有所不同,但以Stream
的形式发送消息正文将有助于克服读取正文时的异常。
message = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes([message_body]));
按上述方式构造消息会有所帮助。
答案 1 :(得分:0)
在尝试寻求类似问题的帮助时,我偶然发现了以下互操作类:Microsoft.Azure.ServiceBus.Extensions.MessageInterOpExtensions.cs 注意:文档中的所有示例均假定您具有对messagereceiver的访问权限,而在Azure函数中,您很可能没有权限。
根据那里的评论,您的特定配置应该有效,但是显然那里存在一些未知错误-您可能必须投放自己的扩展名,或者看看是否可以使用 message.Body byte [] 属性
用于自定义对象的BrokeredMessage构造函数表示它正在将DataContractSerializer与二进制XmlDictionaryWriter一起使用,因此,如果我们知道 Content-Type 是什么,我们也许能够看到DataContractSerializer失败的原因。 / p>
如果所有其他方法均失败,或者直到修复了此明显的错误,您可能必须查看是否可以在 Body 属性中使用字节数组并滚动自己的序列化器/扩展方法。 >