Freigeben über


Anzeigen von Nachrichtenprotokollen

In diesem Thema wird beschrieben, wie Sie Nachrichtenprotokolle anzeigen können.

Anzeigen von Nachrichtenprotokollen im Service Trace Viewer

Eine Nachricht wird während ihrer Verarbeitung von WCF transformiert. Deshalb spiegelt eine Nachricht, die protokolliert wird, lediglich den Nachrichteninhalt am Protokollierungspunkt wider, nicht den Inhalt der Verbindung.

Da die Ausgabe der Nachrichtenprotokollierung völlig unabhängig vom Übertragungsformat der Nachricht ist, gibt die Nachrichtenprotokollierung stets die decodierte Nachricht aus. Wenn Sie die Nachrichtenprotokollierung ordnungsgemäß konfiguriert haben, sollte jede protokollierte Nachricht als Klartext vorliegen. Beispielsweise wird das Format (Klartext) der protokollierten Nachrichten nicht durch die Verwendung eines binären Nachrichtenencoders beeinflusst.

Die Ausgabe von XmlWriterTraceListener ist eine Datei, die eine Sequenz von XML-Fragmenten enthält. Sie sollten beachten, dass die Datei keine gültige XML-Datei ist. Es wird empfohlen, dass Sie das Service Trace Viewer-Tool (SvcTraceViewer.exe) verwenden, um die Nachrichtenprotokolldateien anzuzeigen. Weitere Informationen zum Verwenden dieses Tools finden Sie unter Verwenden des Dienstablaufverfolgungsanzeiges zum Anzeigen korrelierter Ablaufverfolgungen und Problembehandlung.

In der Service Trace Viewer werden die Nachrichten auf der Registerkarte Message aufgelistet. Meldungen, die einen Verarbeitungsfehler verursacht haben oder damit in Zusammenhang stehen, werden je nach Schweregrad des Fehlers gelb (Warnstufe) oder rot (Fehlerstufe) hervorgehoben. Wenn Sie auf die Nachricht doppelklicken, wird die Nachrichtenablaufverfolgung im Kontext der Verarbeitungsanforderung aufgerufen.

Hinweis

Wenn eine Nachricht keinen Header aufweist, wird kein <header/>-Tag protokolliert.

Anzeigen von Nachrichten, die von einem Client, einem Relay und einem Dienst protokolliert werden

Ihre Umgebung kann einen Client enthalten, der eine Nachricht an ein Relay sendet, das die Nachricht wiederum an den Dienst weiterleitet. Wenn die Nachrichtenprotokollierung an allen drei Speicherorten aktiviert ist und alle drei Nachrichtenprotokolle in Service Trace Viewer Tool (SvcTraceViewer.exe) gleichzeitig angezeigt werden, wird der Nachrichtenprotokollaustausch falsch gerendert. Dies ist darauf zurückzuführen, dass CorrelationId und ActivityId im Nachrichtenheader nicht für jedes Absender-Empfängerpaar eindeutig sind.

Sie können eine der folgenden Methoden verwenden, um dieses Problem zu lösen.

  • Zeigen Sie nur zwei der drei Nachrichtenprotokolle im Service Trace Viewer Tool (SvcTraceViewer.exe) jederzeit an.

  • Wenn Sie alle drei Protokolle gleichzeitig im Service Trace Viewer Tool (SvcTraceViewer.exe) anzeigen müssen, können Sie den Relay-Dienst ändern, indem Sie eine neue Message-Instanz erstellen. Bei dieser Instanz sollte es sich um eine Kopie des Textes der eingehenden Nachricht handeln und zusätzlich um alle Header mit Ausnahme des ActivityId-Headers und des Action-Headers. Der folgende Beispielcode veranschaulicht, wie Sie dabei vorgehen:

Message outgoingMessage = Message.CreateMessage(incomingMessage.Version, incomingMessage.Headers.Action, incomingMessage.GetReaderAtBodyContents());  
  
for (int i = 0; i < incomingMessage.Headers.Count; i++)  
{  
   if (incomingMessage.Headers[i].Name.Equals("ActivityId", StringComparison.InvariantCultureIgnoreCase) ||  
incomingMessage.Headers[i].Name.Equals("Action", StringComparison.InvariantCultureIgnoreCase))  
   {  
      continue;  
    }  
    outgoingMessage.Headers.CopyHeaderFrom(incomingMessage, i);  
}  

Ausnahmefälle für ungenauen Nachrichtenprotokollierungsinhalt

Unter den folgenden Bedingungen entsprechen die protokollierten Nachrichten eventuell nicht genau der Darstellung des in der Verbindung vorhandenen octet-Streams.

  • Für BasicHttpBinding werden Umschlagheader für die eingehenden Nachrichten im /adressing/non-Namespace protokolliert.

  • Leerzeichen können nicht übereinstimmen.

  • Für eingehende Nachrichten können leere Elemente unterschiedlich dargestellt werden. Beispiel: <Tag></Tag> anstelle von <tag/>

  • Wenn die bekannte PII-Protokollierung deaktiviert ist, indem standardmäßig oder ausdrücklich enableLoggingKnownPii auf "true" festgelegt wird.

  • Die Codierung wird für die Transformation in UTF-8 aktiviert.

Siehe auch