2009-06-02 15 views
5

मुझे विंडोज संदेश कतार के माध्यम से मेरे सी # ऐप से विरासत एप्लिकेशन के साथ संवाद करने की आवश्यकता है।मैं अपने सिस्टम को कैसे रोकूं। मैसेजिंग। मैसेज्यूयूयू एक्सएमएल में अपने तारों को लपेटने से?

विरासत एप्लिकेशन किसी विशेष निजी कतार में सादा स्ट्रिंग संदेशों की अपेक्षा करता है, लेकिन मैं सिस्टम को रोक नहीं सकता। मैसेजिंग। मैसेज्यूयूयू एक्सएमएल में अपना संदेश लपेटने से!

कोड मैं परीक्षण कर रहा हूँ बहुत सरल है:

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> 

मैं नहीं कर सकता विरासत अनुप्रयोग के व्यवहार को संशोधित करें, इसलिए मुझे सिस्टम को रोकना होगा। मैसेजिंग। मैसेज क्यूई एक्सएमएल के रूप में मेरे संदेश को स्वरूपित करने से।

क्या कोई मदद कर सकता है?

उत्तर

3

आप अपनी खुद की फ़ॉर्मेटर बना सकते हैं (यह एक वर्ग है कि IMessageFormatter लागू करता है और संदेश

यहाँ की फ़ॉर्मेटर संपत्ति के लिए असाइन करें MSDN करने के लिए एक link Message.Formatter संपत्ति है।

मैं इसने कोशिश नहीं की है, लेकिन आपको बॉडीस्ट्रीम का उपयोग करके अपना संदेश लिखने में सक्षम होना चाहिए, मुझे विश्वास है कि यह फॉर्मेटर को बाईपास करेगा।

+0

सीधे बॉडीस्ट्रीम पर लिखने से काम किया, धन्यवाद। यह सबसे आसान परिवर्तन की तरह लग रहा था इसलिए मैंने इसे पहले कोशिश की :) – Damovisa

+0

मैंने कई खुद को लिखा है और वे वास्तव में अच्छी तरह से काम करते हैं। केवल एक चीज जिसके बारे में आपको चिंता करना है वह प्रेषक और शरीर के प्रकार को समझने वाला व्यक्ति है। –

+0

हमें एक ही समस्या है। हम कतार पढ़/लिख सकते हैं और संदेश वापस ठीक कर सकते हैं। लेकिन जब विक्रेता कतार पढ़ता है, तो वह हमारे संदेश के चारों ओर लिपटे अतिरिक्त "सामान" को देखता है। हम बिना किसी रैपिंग के बस एक साधारण स्ट्रिंग कैसे लिख सकते हैं? यहां तक ​​कि बाइनरीफॉर्मेटर ने स्ट्रिंग की शुरुआत में बाइट्स का एक गुच्छा जोड़ा। – NealWalters

3

ActiveXMessageFormatter का उपयोग करके आपको वांछित परिणाम मिलेंगे। हमारे पास एक ही समस्या थी जो सिर्फ पास करना चाहते थे एक कतार के लिए स्ट्रिंग और श्रोता proces है एक स्ट्रिंग के रूप में शरीर में पढ़ा है। ActiveXMessageFormatter का उपयोग आदिम डेटा प्रकारों को क्रमबद्ध/deserializing के लिए किया जाता है और डिफ़ॉल्ट रूप से XmlMessageFormatter के मामले में आपके इनपुट पर एक एक्सएमएल रैपर नहीं लगाएगा।

mq.Formatter = new ActiveXMessageFormatter(); 

Here 3 अलग formatters वर्णन के रूप में अच्छी तरह से एक और कड़ी है।

संबंधित मुद्दे

 संबंधित मुद्दे