Azure Function v2中的BrokeredMessage发送和消息使用者

时间:2018-09-20 07:03:40

标签: c# azure azure-functions azureservicebus

我有模拟的天蓝色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是否兼容BrokeredMessageMessage?有什么建议吗?

2 个答案:

答案 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 属性中使用字节数组并滚动自己的序列化器/扩展方法。 >