代码之家  ›  专栏  ›  技术社区  ›  Damovisa

如何阻止System.Messaging.MessageQueue将字符串包装为XML?

  •  5
  • Damovisa  · 技术社区  · 15 年前

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

    遗留应用程序希望在特定的私有队列中包含纯字符串消息,但我似乎无法阻止System.Messaging.MessageQueue将我的消息包装为XML!

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

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

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

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

    有人能帮忙吗?

    2 回复  |  直到 15 年前
        1
  •  4
  •   jaywon    12 年前

    ActiveXMessageFormatter 会给你想要的结果。我们也有同样的问题,只是想将一个字符串传递给队列,并让侦听器进程在主体中作为字符串读取。这个 ActiveXMessageFormatter 用于序列化/反序列化基本数据类型,不会像默认情况那样在输入上放置XML包装器 XmlMessageFormatter .

    mq.Formatter = new ActiveXMessageFormatter();
    

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

        2
  •  3
  •   Jeff    15 年前

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

    这是一个 link 将MSDN添加到Message.Formatter属性。

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