2009-06-02 9 views
5

Ich muss mit einer Legacy-Anwendung von meiner C# -App über die Windows Message Queue kommunizieren.Wie verhindere ich, dass meine System.Messaging.MessageQueue meine Zeichenfolgen in XML umschließt?

Die Legacy-Anwendung erwartet normale String-Nachrichten in einer bestimmten privaten Warteschlange, aber ich kann nicht verhindern, dass die System.Messaging.MessageQueue meine Nachricht in XML verpackt!

Die Code-I-Tests sind, ist sehr einfach:

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

Das Problem ist, dass die Nachricht ist XML serialisiert und erscheint in der Warteschlange als:

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

Ich kann nicht Ändern Sie das Verhalten der Legacy-Anwendung, sodass ich die System.Messaging.MessageQueue stoppen muss, um meine Nachricht als XML zu formatieren.

Kann jemand helfen?

Antwort

3

Sie können Ihre eigenen Formatierer erstellen (es eine Klasse, die IMessageFormatter implementiert und an die Formatter-Eigenschaft der Nachricht zuweisen

Hier ist ein link auf MSDN zum Message.Formatter Eigenschaft.

I Ich habe das nicht versucht, aber Sie sollten in der Lage sein, Ihre Nachricht mit dem BodyStream zu schreiben, ich glaube, dass dies den Formatierer umgehen wird.

+0

Schreiben direkt in den BodyStream funktioniert, danke. Es sah wie die einfachste Änderung aus, also versuchte ich es zuerst :) – Damovisa

+0

Ich habe einige selbst geschrieben und sie arbeiten wirklich gut. Die einzige Sache, um die Sie sich sorgen müssen, ist der Absender und Empfänger, die den Körpertyp verstehen. –

+0

Wir haben ähnliches Problem. Wir können die Warteschlange lesen und schreiben und die Nachricht zurückbekommen. Aber wenn der Verkäufer die Warteschlange liest, sieht er das zusätzliche "Zeug" um unsere Nachricht gewickelt. Wie können wir einfach eine einfache Zeichenfolge ohne Umbruch schreiben? Sogar BinaryFormatter hat am Anfang der Zeichenfolge eine Menge Bytes hinzugefügt. – NealWalters

3

Mit dem ActiveXMessageFormatter erhalten Sie das gewünschte Ergebnis.Wir hatten das gleiche Problem nur mit einem String zu einer Warteschlange und den Hörer Prozess haben s liest den Körper als String vor. Der ActiveXMessageFormatter wird für das Serialisieren/Deserialisieren primitiver Datentypen verwendet und fügt Ihrer Eingabe keinen XML-Wrapper hinzu, wie es beim Standard XmlMessageFormatter der Fall ist.

mq.Formatter = new ActiveXMessageFormatter(); 

Here ist eine andere Verbindung als auch die 3 verschiedenen Formatierer beschreibt.

Verwandte Themen