2010-06-02 6 views
7

मैं अपनी कतारों के अंदर देखना चाहता हूं, एमएसएम कंसोल स्नैपिन में यह संपत्ति संवाद है, लेकिन इसे पढ़ना बहुत मुश्किल है और मेरे लिए महत्वपूर्ण संदेश एन्कोड किए गए हैं और इस तरह दिखेगा:msmq संदेशों को पढ़ने के लिए कैसे करें (मुझे, पीसी नहीं)

3C 3F 78 6D 6C 20 76 65 <?xml ve 
72 73 69 6F 6E 3D 22 31 rsion="1 
2E 30 22 20 65 6E 63 6F .0" enco 
64 69 6E 67 3D 22 75 74 ding="ut 
66 2D 38 22 3F 3E 0D 0A f-8"?>.. 
3C 65 73 62 3A 6D 65 73 <esb:mes 
73 61 67 65 73 20 78 6D sages xm 
6C 6E 73 3A 65 73 62 3D lns:esb= 
22 68 74 74 70 3A 2F 2F "http:// 
73 65 72 76 69 63 65 62 serviceb 
75 73 2E 68 69 62 65 72 us.hiber 
6E 61 74 69 6E 67 72 68 natingrh 

...

किसी को भी एक उपकरण है कि मुझे थोड़ा डेवलपर के अनुकूल तरीके से मेरे संदेश को देखने के लिए अनुमति होगी के जानता है? आसान का प्रबंध कतारों के लिए एक उपकरण (एक से अधिक संदेशों और खींचें का चयन की तरह है और उन्हें ड्रॉप) के लिए काम आएगा

उत्तर

5

यह सबसे अच्छा उपकरण मैंने पाया के बारे में है: http://www.cogin.com/msmq/QueueExplorer/QueueExplorer2.2.php

+0

हम्म, अच्छा लग रहा है - लेकिन मैं सिर्फ अपने जर्नल उप कतार देख सकते हैं - आपको लगता है इस वजह से मैं एक पंजीकृत उपयोगकर्ता नहीं हूँ? – Jan

+0

मेरे पास परीक्षण संस्करण नहीं है, लेकिन मेरे पूर्ण संस्करण में मैं रिमोट कतार सहित सभी कतारों का पता लगा सकता हूं। –

+0

उनके पास अब एक नया बीटा है जो उप कतारों को समझता है। मैं अब तक इसका उपयोग कर रहा हूं। थोड़ा छोटी गाड़ी (अच्छी तरह से, बीटा), लेकिन एक काफी उपयोगी उपकरण। मुझे आश्चर्य है कि क्यों एमएस कुछ भी बेहतर नहीं हो सका। – Jan

0

जो कर सकते हैं तो आप सिर्फ कुछ हेक्साडेसिमल डेटा है, तो आसानी से ASCII और पीछे में परिवर्तित किया जा सकता है, तो मैं एक टेक्स्ट एडिटर सुझाता हूं जो आपको ऐसा करने देता है। UltraEdit में "हेक्स देखें" फ़ंक्शन है जो हेक्साडेसिमल दृश्य से और दोनों में कनवर्ट करने के लिए काम करता है। आप नोटपैड ++ को भी आजमा सकते हैं लेकिन मुझे नहीं पता कि इसमें यह सुविधा है या नहीं।

+1

संपत्ति संवाद केवल पहली पंक्तियों और पाठ को डीकोड किए गए पाठ को दिखाता है। मुझे संदेह है कि मैं उन लोगों के साथ कुछ भी कर सकता हूं। – Jan

+0

ओह ठीक है, मुझे नहीं पता था कि आपके पास अधिक डेटा तक पहुंच नहीं है। – JYelton

2

MSMQ स्टूडियो की जाँच कर सकता है इस प्रयास करें:

string QueueName = @".\private$\publishingQueue"; 

//note, you cannot use method exists on remote queues 

if (MessageQueue.Exists(QueueName)) 
{ 
    var queue = new MessageQueue(queueInfo.QueueName) 
    { 
     MessageReadPropertyFilter = new MessagePropertyFilter 
     { 
      ArrivedTime = true, 
      Body = true 
     } 
    }; 

    var messages = queue.GetAllMessages(); 
    var m = messages[0]; 
    m.Formatter = new System.Messaging.XmlMessageFormatter(new String[] {}); 

    StreamReader sr = new StreamReader(m.BodyStream); 

    string ms = ""; 
    string line; 

    while (sr.Peek() >= 0) 
    { 
     ms += sr.ReadLine(); 
    } 

    //ms now contains the message  
} 
2

मैं जबकि इस प्रश्न का उत्तर के लिए खोज इन दोनों तरीकों मिल गया है और वे वास्तव में पूरी तरह से काम किया।

public System.Xml.XmlDocument ConvertToXMLDoc(System.Messaging.Message msg) 
    { 
     byte[] buffer = new byte[msg.BodyStream.Length]; 
     msg.BodyStream.Read(buffer, 0, (int)msg.BodyStream.Length); 
     int envelopeStart = FindEnvolopeStart(buffer); 
     System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer, envelopeStart, buffer.Length - envelopeStart); 
     System.ServiceModel.Channels.BinaryMessageEncodingBindingElement elm = new System.ServiceModel.Channels.BinaryMessageEncodingBindingElement(); 
     System.ServiceModel.Channels.Message msg1 = elm.CreateMessageEncoderFactory().Encoder.ReadMessage(stream, Int32.MaxValue); 
     System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
     doc.Load(msg1.GetReaderAtBodyContents()); 
     msg.BodyStream.Position = 0; 
     return doc; 
    } 

    private int FindEnvolopeStart(byte[] stream) 
    { 
     int i = 0; 
     byte prevByte = stream[i]; 
     byte curByte = (byte)0; 
     for (i = 0; i < stream.Length; i++)    
     { 
      curByte = stream[i]; 
      if (curByte == (byte)0x02 && 
      prevByte == (byte)0x56) 
       break; 
      prevByte = curByte; 
     } 
     return i - 1; 
    } 

बस ConvertToXmlDoc फ़ंक्शन को कॉल संदेश कतार से संदेश प्रदान करने और आप एक XmlDocument वापस मिल जाएगा। मैं आलसी हूं, इसलिए मैं अंदरूनी एक्सएमएल को एक फाइल में छोड़ देता हूं ताकि मैं इसे पढ़ सकूं।

MessageQueue queue = new MessageQueue(queueName); 
    var msg = queue.Receive(); 
    var doc = ConvertToXMLDoc(msg);     
    using (var sw = new StreamWriter(@"C:\message.txt"))) 
      sw.Write(doc.InnerXml); 

कोई आवेदन खरीदने के लिए और आप अपने डेटा वापस कोड में तो आप इसके साथ गड़बड़ चारों ओर कर सकते हैं मिलता है।

पीएस: क्रेडिट जहां क्रेडिट देय है। स्निपेट http://social.msdn.microsoft.com/forums/en-US/wcf/thread/c03d80cd-492c-4ece-8890-6a35b12352e0 से आया था, जो एमएसएमक्यू के एन्कोडिंग प्रारूप की एक और विस्तृत चर्चा से भी जुड़ा हुआ है।

0

आप सेवा बस एमक्यू प्रबंधक का उपयोग कर सकते हैं, यह एक मुक्त ओपन-सोर्स टूल है जिसे मैंने एमएसएमक्यू में संदेश देखने के लिए लिखा था, यह एक्सएमएल और जेएसओएन संदेशों के रंग और स्वरूपण का समर्थन करता है।

http://blog.halan.se/page/Service-Bus-MQ-Manager.aspx

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