如何阻止我的System.Messaging.MessageQueue将我的字符串包装在XML中?

时间:2009-06-02 00:05:52

标签: c# .net xml-serialization msmq

我需要通过Windows Message Queue与我的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。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

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

以下是Message.Formatter属性的MSDN link

我没有尝试过这个但你应该能够使用BodyStream编写你的消息,我相信这会绕过格式化程序。

答案 1 :(得分:3)

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

mq.Formatter = new ActiveXMessageFormatter();

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