Как мне помешать моему System.Messaging.MessageQueue обернуть мои строки в XML? - PullRequest
5 голосов
/ 02 июня 2009

Мне нужно связаться с унаследованным приложением из моего приложения C # через очередь сообщений Windows.

Устаревшее приложение ожидает сообщения в виде обычной строки в определенной частной очереди, но я не могу остановить 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 ]

3 голосов
/ 09 мая 2012

Использование ActiveXMessageFormatter даст вам желаемый результат. У нас была та же проблема, когда мы просто хотели передать строку в очередь и получить процесс прослушивания в теле в виде строки. ActiveXMessageFormatter используется для сериализации / десериализации примитивных типов данных и не помещает оболочку XML на ваш вход, как в случае с XmlMessageFormatter по умолчанию .

mq.Formatter = new ActiveXMessageFormatter();

Здесь - это еще одна ссылка, описывающая также 3 различных модуля форматирования.

3 голосов
/ 02 июня 2009

Вы можете создать свой собственный форматер (это класс, который реализует IMessageFormatter и назначить его свойству Formatter сообщения

Вот ссылка на MSDN со свойством Message.Formatter.

Я не пробовал этого, но вы должны быть в состоянии написать свое сообщение, используя BodyStream, я думаю, что это обойдёт форматер.

...