6

我需要通过 Windows 消息队列从我的 C# 应用程序与旧应用程序通信。

旧版应用程序在特定的私有队列中需要纯字符串消息,但我似乎无法阻止 System.Messaging.MessageQueue 将我的消息包装在 XML 中!

我正在测试的代码非常简单:

MessageQueue myQueue = new MessageQueue(@".\Private$\tolegacy");
Message msg = new Message("My Test String");
myQueue.Send(msg);

问题是消息正在被 XML 序列化并在队列中显示为:

<?xml version="1.0"?><string>My Test String</string>

我无法修改旧应用程序的行为,因此我需要阻止 System.Messaging.MessageQueue 将我的消息格式化为 XML。

任何人都可以帮忙吗?

4

2 回答 2

4

使用ActiveXMessageFormatter将为您提供所需的结果。我们只是想将一个字符串传递给一个队列并让侦听器进程作为字符串在正文中读取时遇到了同样的问题。ActiveXMessageFormatter用于序列化/反序列化原始数据类型,不会像默认的 XmlMessageFormatter 那样在您的输入上放置 XML包装

mq.Formatter = new ActiveXMessageFormatter();

是另一个描述 3 种不同格式化程序的链接。

于 2012-05-09T00:53:42.617 回答
3

您可以创建自己的格式化程序(它是一个实现 IMessageFormatter 并将其分配给 Message 的 Formatter 属性的类

这是MSDN 到 Message.Formatter 属性 的链接。

我没有尝试过,但您应该可以使用 BodyStream 编写您的消息,我相信这将绕过格式化程序。

于 2009-06-02T00:21:09.477 回答