Azure 服务总线中转消息反序列化



我正在使用WCF NetMessaging向ASB发送消息。 消息可以包含任意数量的自定义数据协定。

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

我可以将操作添加到 BrokeredMessage.Properties 中,以便我知道将其发送到何处。问题是我还没有弄清楚如何以任何有效的方式反序列化消息正文。

我可以从流中读取它并将其转换为字符串,但不能这样做: var myDTO = 消息。GetBody(); 这将引发序列化异常。我还尝试了在 DataContractSerializer 中传递的变体 - 即使我认为这是默认值。

此外,我真正需要的是一种在不知道正文中数据类型的情况下执行此操作的方法 - 我可以想象,添加更多消息。在正文中序列化的类型的属性,但我认为必须有一种直接的方法仅使用主体中的数据来做到这一点 - 毕竟 WCF 和类似的技术可以轻松做到这一点。但是怎么做呢?

感谢您的任何帮助, 将

要有一个独立的消息正文:

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

这或多或少是基于 SOAP 的 WCF 服务的做法。

通过创建一些单元测试,确保 DTO 是数据协定可序列化的。 请记住,消息正文大小在 ASB 中是有限的,XML 可能不是序列化的最佳选择。

您可能也遇到了此问题。

最新更新