Azure Service Bus代理消息反序列化

时间:2019-04-05 00:06:00

标签: deserialization azure-service-fabric azure-servicebus-queues brokeredmessage

我正在使用WCF NetMessaging将消息发送到ASB。 该消息可以包含任意数量的自定义数据合同。

我有一个Service Fabric无状态服务,具有用于ASB的自定义侦听器,用于传递推送到队列中的消息。我见过的所有示例只能处理一种类型的消息(似乎大多数指南是将序列化为JSON,但这不是我需要的)。我希望队列的订阅者能够处理许多消息(发送给服务任何操作的任何消息)。

我能够将Action添加到BrokeredMessage.Properties中,因此我知道将其发送到哪里。问题是我还没有弄清楚如何以任何可行的方式反序列化邮件正文。

我可以从流中读取它并将其获取为字符串,但是不能这样做: var myDTO = message.GetBody(); 这引发了序列化异常。我还尝试了通过DataContractSerializer传递的变量,尽管我认为这是默认的。

此外,我真正需要的是一种在不了解主体中数据类型的情况下进行此操作的方法-可以想象,我可以添加更多消息。在主体中序列化类型的属性,但是我认为必须有一个直接使用体内数据的直接方法-在所有WCF和类似技术人员都轻松完成此操作之后。但是如何?

感谢您的帮助, 会

1 个答案:

答案 0 :(得分:1)

要拥有独立的邮件正文:

创建一个描述内容(类型名称,发件人,时间戳等)的信封类型,并包含一个有效载荷(字符串)属性以包含序列化的对象。 要发出消息,请序列化(压缩,加密)对象,然后将结果分配给Envelope实例的有效负载属性。序列化信封并将其发送出去。 要接收消息,请将消息正文反序列化为一个信封,检查类型信息,然后反序列化有效负载。

这或多或少是基于SOAP的WCF服务执行/完成的方式。

通过创建一些单元测试,确保DTO为datacontract-serializable。 请记住,消息主体的大小受ASB限制,XML可能不是您序列化的最佳选择。

您也可能是hitting this issue

相关问题