2010-06-02 7 views
7

Ich möchte in meine Warteschlangen, die MMS-Konsole Snapin hat diese Eigenschaft Dialog, aber es ist sehr schwer zu lesen und die Nachrichten, die für mich wichtig sind kodiert sind und wie folgt aussehen:Wie zu lesen MMSQ Nachrichten (ich, nicht der PC)

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 

...

Wer weiß, eines Werkzeugs, das mir erlauben würde, meine Botschaften in ein wenig Entwickler freundlich zu sehen? Ein Werkzeug für eine einfachere Verwaltung von Warteschlangen kommen würde praktisch, um (wie mehrere Nachrichten und ziehen Sie die Auswahl und Drop)

Antwort

5

Hier geht es um das beste Werkzeug, das ich gefunden habe: http://www.cogin.com/msmq/QueueExplorer/QueueExplorer2.2.php

+0

Hm, sieht gut aus - aber ich kann nur meine Journal Unter Warteschlange sehen - denken Sie, das ist, weil ich kein registrierter Benutzer bin? – Jan

+0

Ich habe keine Testversion, aber in meiner Vollversion kann ich alle Warteschlangen untersuchen, einschließlich Remote-Warteschlangen. –

+0

haben sie jetzt eine neue Beta, die Unterschlangen versteht. Ich benutze das bisher. Ein bisschen buggy (gut, Beta), aber ein ziemlich nützliches Werkzeug. Ich frage mich, warum MS sich nichts Besseres einfallen lassen konnte. – Jan

0

Wenn Sie nur einige hexadezimalen Daten haben kann, einfach in ASCII und zurück konvertiert werden, dann schlage ich einen Texteditor vor, der genau das ermöglicht. UltraEdit hat eine "View Hex" -Funktion, die sowohl in die hexadezimale Ansicht als auch in die hexadezimale Ansicht konvertiert werden kann. Sie könnten auch Notepad ++ ausprobieren, aber ich weiß nicht, ob es diese Funktion hat.

+1

Der Eigenschaftendialog zeigt nur die ersten n Zeilen und den Text an, der zusätzlich dekodiert wurde. Ich bezweifle, dass ich damit etwas anfangen kann. – Jan

+0

Oh, richtig, ich habe nicht bemerkt, dass Sie nicht auf mehr Daten zugreifen konnten. – JYelton

2

Try this:

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

ich diese beiden Methoden gefunden, während auf diese Frage eine Antwort suchen und sie arbeiteten wirklich perfekt.

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; 
    } 

einfach die ConvertToXmlDoc Funktion aufrufen, die Nachricht aus der Nachrichtenwarteschlange bereitstellt und Sie erhalten eine XmlDocument zurück. Ich bin faul, also lasse ich den innerXml einfach in eine Datei fallen, damit ich sie lesen kann.

Keine Anwendung zu kaufen und Sie erhalten Ihre Daten zurück in Code, so dass Sie damit umgehen können.

PS: Kredit, wo Kredit fällig ist. Das Snippet stammt von http://social.msdn.microsoft.com/forums/en-US/wcf/thread/c03d80cd-492c-4ece-8890-6a35b12352e0, das auch auf eine ausführlichere Diskussion des MSMQ-Codierungsformats verweist.

0

Sie können Service Bus MQ Manager verwenden, ein kostenloses Open-Source-Tool, das ich zum Anzeigen von Nachrichten in MSMQ geschrieben habe. Es unterstützt das Einfärben und Formatieren von XML- und JSON-Nachrichten.

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