2009-06-02 14 views
5

Necesito comunicarme con una aplicación heredada de mi aplicación C# a través de Windows Message Queue.¿Cómo impido que System.Messaging.MessageQueue ajuste mis cadenas en XML?

La aplicación heredada espera mensajes de cadena simple en una cola privada particular, pero parece que no puedo detener System.Messaging.MessageQueue al envolver mi mensaje en XML.

El código Estoy prueba es muy simple:

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

El problema es que el mensaje está siendo XML serializado y aparece en la cola como:

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

no puedo modifique el comportamiento de la aplicación heredada, así que tengo que detener System.Messaging.MessageQueue para formatear mi mensaje como XML.

¿Alguien puede ayudar?

Respuesta

3

Usted puede crear su propio formateador (se trata de una clase que implementa IMessageFormatter y la asigna a la propiedad formateador del mensaje

Aquí está una link a MSDN a la propiedad Message.Formatter.

I No he intentado esto, pero debería poder escribir su mensaje usando BodyStream. Creo que esto omitirá el formateador.

+0

Escribiendo directamente al BodyStream trabajado, gracias. Parecía el cambio más fácil, así que lo intenté primero :) – Damovisa

+0

He escrito varios y funcionan muy bien. De lo único que tienes que preocuparte es de que el emisor y el receptor entiendan el tipo de cuerpo. –

+0

Estamos teniendo un problema similar. Podemos leer/escribir en cola y recuperar el mensaje. Pero cuando el proveedor lee la cola, ve las "cosas" adicionales envueltas alrededor de nuestro mensaje. ¿Cómo podemos simplemente escribir una cadena simple sin ningún tipo de envoltura? Incluso BinaryFormatter agregó un grupo de bytes al principio de la cadena. – NealWalters

3

El uso del ActiveXMessageFormatter le dará el resultado deseado. Tuvimos el mismo problema con solo querer pasar un cadena a una cola y tener el proceso de escucha s leer en el cuerpo como una cadena. El ActiveXMessageFormatter se utiliza para serializar/deserializar tipos de datos primitivos y no pondrá un contenedor XML en su entrada como es el caso con el valor predeterminado XmlMessageFormatter.

mq.Formatter = new ActiveXMessageFormatter(); 

Here es otro enlace de la descripción de las 3 formateadores diferentes también.

Cuestiones relacionadas