2009-06-02 21 views
5

Windows Message Queue aracılığıyla C# uygulamasından eski bir uygulama ile iletişim kurmam gerekiyor.System.Messaging.MessageQueue ürünümün dizelerimi XML'de sarmamasını nasıl engellerim?

Eski uygulama, belirli bir özel sıradaki düz dizeli iletiler olmasını bekler, ancak System.Messaging.MessageQueue mesajımı XML'de sarmalamayı durduramıyor gibi görünmüyor!

Ben test olduğum kod çok basit:

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

sorun mesajı olmanın XML seri hale getirilmiş ve aynı kuyrukta görünür olmasıdır: Yapamam

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

Eski uygulamanın davranışını değiştirdiğimde, System.Messaging.MessageQueue mesajımı XML olarak biçimlendirmekten vazgeçmem gerekiyor.

Herkes yardımcı olabilir mi?

cevap

3

Bunu IMessageFormatter uygulayan bir sınıftır (kendi biçimlendiricisi oluşturmak ve Mesaj İşte

ait Biçimlendirici özelliğine atayın Message.Formatter özelliğine MSDN'ye bir link olduğunu olabilir.

I Bunu denemediniz ama mesajınızı BodyStream kullanarak yazabilmelisiniz, bunun formatı baypas edeceğine inanıyorum.

+0

Doğrudan BodyStream'e çalıştım, teşekkürler. İlk başta denedim en kolay değişiklik gibi görünüyordu :) – Damovisa

+0

Birkaç kendim yazdım ve gerçekten iyi çalışıyorlar. Endişelenmeniz gereken tek şey, vücut tipini anlayan gönderici ve alıcıdır. –

+0

Benzer bir sorun yaşıyoruz. Sıra yazabilir/yazabilir ve mesajı geri alabiliriz. Fakat satıcı sıraya girdiğinde, mesajımızın etrafına sarılı ekstra şeyleri görür. Hiç ambalajsız basit bir dize nasıl yazabiliriz? BinaryFormatter bile dizenin başında bir grup bayt ekledi. – NealWalters

3

ActiveXMessageFormatter size istenilen sonucu verecektir. bir sıraya dizge ve dinleyici işlemlerine sahip olmak vücutta bir ip olarak okur. ActiveXMessageFormatter, ilkel veri türlerini serileştirmek/serileştirmek için kullanılır ve varsayılan XmlMessageFormatter ile olduğu gibi girişinize bir XML sarmalayıcı yerleştirmez.

mq.Formatter = new ActiveXMessageFormatter(); 

Here

da 3 farklı biçemleyicileri açıklayan başka bir bağlantıdır.

İlgili konular