Verwenden von Service Trace Viewer zum Anzeigen korrelierender Ablaufverfolgungen und der Problembehandlung
In diesem Thema wird das Format von Ablaufverfolgungsdaten und ihre Verwendung beschrieben. Dabei wird auch auf die Verwendung von Service Trace Viewer zur Problembehandlung in einer Anwendung eingegangen.
Verwenden des Service Trace Viewer-Tools
Das Windows Communication Foundation (WCF)-Dienstablaufverfolgungs-Viewer-Tool hilft Ihnen, Diagnoseablaufverfolgungen zu korrelieren, die von WCF-Listenern erstellt wurden, um die Ursache eines Fehlers zu finden. Das Tool bietet Ihnen eine Möglichkeit, Ablaufverfolgungen einfach anzuzeigen, zu gruppieren und zu filtern, damit Sie Probleme mit WCF-Diensten diagnostizieren, reparieren und überprüfen können. Weitere Informationen zur Verwendung dieses Tools finden Sie unter Service Trace Viewer Tool (SvcTraceViewer.exe).
Dieses Thema enthält Screenshots von Ablaufverfolgungen, die durch Ausführen des Beispiels " Ablaufverfolgungs- und Nachrichtenprotokollierung " generiert werden, wenn sie mithilfe des Dienstablaufverfolgungs-Viewer-Tools (SvcTraceViewer.exe) angezeigt werden. In diesem Thema werden der Ablaufverfolgungsinhalt, Aktivitäten und ihre Korrelation erläutert. Zudem wird beschrieben, wie eine große Zahl von Ablaufverfolgungen im Rahmen der Problembehandlung analysiert werden können.
Anzeigen von Ablaufverfolgungsinhalt
Ein Ablaufverfolgungsereignis enthält die folgenden wichtigen Informationen:
Aktivitätsname bei Festlegung
Ausgabezeit
Ablaufverfolgungsebene
Name der Ablaufverfolgungsquelle.
Prozessname
Thread-ID
Ein eindeutiger Ablaufverfolgungsbezeichner, der eine URL ist, die auf einen technischen Microsoft-Verweis verweist, der weitere Informationen zur Ablaufverfolgung bereitstellt.
Alle diese können im oberen rechten Bereich im Dienstablaufverfolgungs-Viewer oder im Abschnitt "Grundlegende Informationen " in der formatierten Ansicht des unteren rechten Bereichs angezeigt werden, wenn Sie eine Ablaufverfolgung auswählen.
Hinweis
Wenn sich der Client und der Dienst auf demselben Computer befinden, können die Ablaufverfolgungen für beide Anwendungen eingesehen werden. Diese können mithilfe der Spalte "Prozessname " gefiltert werden.
Zudem bietet die formatierte Ansicht eine Beschreibung der Ablaufverfolgung sowie zusätzliche detaillierte Informationen, sofern diese verfügbar sind. Dazu gehören Ausnahmeart und -nachricht, Aufruflisten, Nachrichtenaktion, Felder Von/Zu und andere Ausnahmeinformationen.
Die XML-Ansicht enthält die folgenden nützlichen XML-Tags:
<SubType>
(Ablaufverfolgungsebene).<TimeCreated>
.<Source>
(Name der Ablaufverfolgungsquelle).<Correlation>
(Aktivitäts-ID festgelegt, wenn sie die Ablaufverfolgung aussendet).<Execution>
(Prozess- und Thread-ID).<Computer>
.<ExtendedData>
, einschließlich<Action>
,<MessageID>
und der<ActivityId>
Satz im Nachrichtenkopf beim Senden einer Nachricht.
Wenn Sie die Ablaufverfolgung "Sent a message over a channel" ("Nachricht über einen Kanal gesendet") prüfen, wird möglicherweise der folgende Inhalt angezeigt.
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>262163</EventID>
<Type>3</Type>
<SubType Name="Information">0</SubType>
<Level>8</Level>
<TimeCreated SystemTime="2006-08-04T18:45:30.8491051Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{27c6331d-8998-43aa-a382-03239013a6bd}"/>
<Execution ProcessName="client" ProcessID="1808" ThreadID="1" />
<Channel />
<Computer>TEST1</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
<TraceIdentifier>http://msdn.microsoft.com/library/System.ServiceModel.Channels.MessageSent.aspx</TraceIdentifier>
<Description>Sent a message over a channel.</Description>
<AppDomain>client.exe</AppDomain>
<Source>System.ServiceModel.Channels.ClientFramingDuplexSessionChannel/35191196</Source>
<ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/MessageTransmitTraceRecord">
<MessageProperties>
<AllowOutputBatching>False</AllowOutputBatching>
</MessageProperties>
<MessageHeaders>
<Action d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">http://Microsoft.ServiceModel.Samples/ICalculator/Multiply</Action>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:7c6670d8-4c9c-496e-b6a0-2ceb6db35338</MessageID>
<ActivityId CorrelationId="b02e2189-0816-4387-980c-dd8e306440f5" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">27c6331d-8998-43aa-a382-03239013a6bd</ActivityId>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
</ReplyTo>
<To d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">net.tcp://localhost/servicemodelsamples/service</To>
</MessageHeaders>
<RemoteAddress>net.tcp://localhost/servicemodelsamples/service</RemoteAddress>
</ExtendedData>
</TraceRecord>
</DataItem>
</TraceData>
</ApplicationData>
</E2ETraceEvent>
ServiceModel E2E-Ablaufverfolgung
Wenn die System.ServiceModel
Ablaufverfolgungsquelle mit einer switchValue
anderen als "Aus" festgelegt wird, erstellt ActivityTracing
WCF Aktivitäten und Übertragungen für die WCF-Verarbeitung.
Eine Aktivität ist eine logische Verarbeitungseinheit, die alle verknüpften Ablaufverfolgungen zusammenfasst. So können Sie beispielsweise eine Aktivität für jede Anforderung definieren. Übertragungen stellen eine kausale Beziehung zwischen Aktivitäten innerhalb von Endpunkten her. Durch die Weitergabe der Aktivitäts-ID können Sie Aktivitäten über Endpunkte hinweg verknüpfen. Dies kann durch Festlegen propagateActivity
=true
in der Konfiguration an jedem Endpunkt erfolgen. Aktivitäten, Übertragungen und Weitergabe ermöglichen es Ihnen, die Fehlerkorrelation durchzuführen. Auf diese Weise können Sie die Grundursache eines Fehlers schneller ermitteln.
Auf dem Client wird eine WCF-Aktivität für jeden Objektmodellaufruf erstellt (z. B. Open ChannelFactory, Add, Dividieren usw.). Jeder Der Vorgangsaufrufe wird in einer Aktivität "Prozessaktion" verarbeitet.
Im folgenden Screenshot wird im Beispiel "Ablaufverfolgungs- und Nachrichtenprotokollierung " im linken Bereich die Liste der im Clientprozess erstellten Aktivitäten angezeigt, sortiert nach Erstellungszeit. Es folgt eine chronologische Liste von Aktivitäten:
Kanalfactory erstellt (ClientBase).
Kanalfactory geöffnet.
Add-Aktion (Hinzufügen) verarbeitet.
Set Up Secure Session (Sichere Sitzung einrichten) ausgeführt (nach erster Anforderung ERFOLGT) und drei Sicherheitsinfrastruktur-Antwortnachrichten verarbeitet: RST, RSTR, SCT (Process message 1, 2, 3; Nachricht 1, 2, 3 verarbeiten).
Anforderungen Subtract, Multiply und Divide (Subtrahieren, Multiplizieren und Dividieren) verarbeitet.
Kanalfactory geschlossen, dabei sichere Sitzung beendet und Sicherheitsantwort Cancel (Abbrechen) verarbeitet.
Die Sicherheitsinfrastrukturnachrichten sind aufgrund der Bindung wsHttpBinding sichtbar.
Hinweis
In WCF zeigen wir Zunächst verarbeitete Antwortnachrichten in einer separaten Aktivität (Prozessnachricht) an, bevor wir sie mit der entsprechenden Prozessaktionsaktivität korrelieren, die die Anforderungsnachricht enthält, über eine Übertragung. Das geschieht sowohl für Infrastrukturnachrichten als auch für asynchrone Anforderungen, da die Nachricht geprüft, der activityId-Header gelesen und die vorhandene ProcessAction-Aktivität mit der ID ermittelt werden muss, um die Korrelation vorzunehmen. Bei synchronen Anforderungen wird die Antwort blockiert, weshalb bekannt ist, mit welcher Verarbeitungsaktion die Antwort verknüpft ist.
Die folgende Abbildung zeigt WCF-Clientaktivitäten, die nach Erstellungszeit (links) und deren geschachtelten Aktivitäten und Ablaufverfolgungen (oberes rechtes Panel) aufgeführt sind:
Wenn Sie im linken Bereich eine Aktivität auswählen, werden die verschachtelten Aktivitäten und Ablaufverfolgungen im rechten oberen Bereich angezeigt. Dabei handelt es sich somit um eine auf der Basis der ausgewählten übergeordneten Aktivität verkürzte hierarchische Ansicht der Aktivitätenliste auf der linken Seite. Da die ausgewählte Verarbeitungsaktion Add die erste Anforderung ist, enthält diese Aktivität die Aktivität Set Up Secure Session (Übertragung nach, Rückübertragung von) sowie Ablaufverfolgungen für die eigentliche Verarbeitung der Add-Aktion.
Wenn wir im linken Bereich auf die Aktivität "Prozessaktion hinzufügen" doppelklicken, können wir eine grafische Darstellung der Client-WCF-Aktivitäten im Zusammenhang mit "Hinzufügen" sehen. Die erste Aktivität auf der linken Seite ist die Stammaktivität (0000), bei der es sich um die Standardaktivität handelt. WCF überträgt aus der Umgebungsaktivität. Wenn dies nicht definiert ist, überträgt WCF aus 0000. Im vorliegenden Fall überträgt die zweite Aktivität, die Verarbeitungsaktion Add, aus 0 heraus. Dann wird Set Up Secure Session (Sichere Sitzung einrichten) angezeigt.
Die folgende Abbildung zeigt eine Diagrammansicht der WCF-Clientaktivitäten, insbesondere Umgebungsaktivität (hier 0), Prozessaktion und Einrichten sicherer Sitzung:
Im oberen rechten Bereich sind alle Ablaufverfolgungen zu sehen, die mit der Process Action Add-Aktivität verknüpft sind. Das bedeutet, in ein und derselben Aktivität wurde die Anforderungsnachricht gesendet ("Sent a message over a channel", "Nachricht über einen Kanal gesendet") und die Antwort empfangen ("Received a message over a channel", "Nachricht über einen Kanal empfangen"). Dies wird im folgenden Diagramm dargestellt. Zur besseren Übersichtlichkeit ist die Set Up Secure Session-Aktivität im Diagramm reduziert.
Die folgende Abbildung zeigt eine Liste der Ablaufverfolgungen für die Prozessaktionsaktivität. Wir senden die Anfrage und empfangen die Antwort in derselben Aktivität.
Hier laden wir Clientablaufverfolgungen nur für Klarheit, aber Dienstablaufverfolgungen (gesendete Anforderungsnachricht und Antwortnachricht) werden in derselben Aktivität angezeigt, wenn sie auch im Tool geladen werden und propagateActivity
auf diese festgelegt true.
wurde, wird in einer späteren Abbildung gezeigt.
Im Dienst ordnet das Aktivitätsmodell den WCF-Konzepten wie folgt zu:
Ein ServiceHost wird erstellt und geöffnet (dadurch werden möglicherweise mehrere hostbezogene Aktivitäten erzeugt, z. B. im Falle der Sicherheit).
Es wird eine Lauschaktivität für jeden Listener im ServiceHost erstellt (mit Übertragung in und aus Open ServiceHost).
Wenn der Listener eine vom Client initiierte Kommunikationsanforderung erkennt, wird er an eine Aktivität "Empfangen von Bytes" übertragen, in der alle vom Client gesendeten Bytes verarbeitet werden. In dieser Aktivität sind alle Verbindungsfehler erkennbar, die während der Client-Dienst-Interaktion aufgetreten sind.
Für jeden empfangenen Bytesatz, der einer Nachricht entspricht, verarbeiten wir diese Bytes in einer "Process Message"-Aktivität, in der wir das WCF Message-Objekt erstellen. In dieser Aktivität sind Fehler aufgrund eines ungültigen Umschlags oder einer falsch formatierten Nachricht erkennbar.
Sobald die Nachricht erstellt wird, erfolgt die Übertragung zu einer Process Action-Aktivität. Wenn
propagateActivity
sowohl für den Client als auch für den Dienst auftrue
festgelegt ist, verfügt diese Aktivität über dieselbe ID wie die auf dem Client definierte und zuvor beschriebene. In dieser Phase profitieren wir von direkter Korrelation über Endpunkte hinweg, da alle ablaufen, die in WCF ausgegeben werden, die mit der Anforderung verbunden sind, in derselben Aktivität enthalten sind, einschließlich der Verarbeitung von Antwortnachrichten.Bei der Außerprozessaktion erstellen wir eine Aktivität "Benutzercode ausführen", um Ablaufverfolgungen zu isolieren, die im Benutzercode aus den in WCF ausgegebenen ablaufen. Im vorherigen Beispiel wird die Ablaufverfolgung "Dienst sendet Antwort" in der Aktivität "Benutzercode ausführen" nicht in der vom Client verteilten Aktivität ausgegeben, sofern zutreffend.
In der nachfolgenden Abbildung ist die erste Aktivität auf der linken Seite die Stammaktivität (0000), bei der es sich um die Standardaktivität handelt. Die nächsten drei Aktivitäten dienen dazu, den ServiceHost zu öffnen. Die Aktivität in Spalte 5 ist der Listener, und die übrigen Aktivitäten (6 bis 8) beschreiben die WCF-Verarbeitung einer Nachricht, von der Byteverarbeitung bis zur Benutzercodeaktivierung.
Die folgende Abbildung zeigt eine Diagrammansicht der WCF-Dienstaktivitäten:
Der folgende Screenshot zeigt die Aktivitäten sowohl des Clients als auch des Diensts. Die Process Action Add-Aktivität ist orange hervorgehoben. Pfeile verknüpfen die Anforderungs- und die Antwortnachrichten, die vom Client und vom Dienst gesendet und empfangen werden. Die ProcessAction-Ablaufverfolgungen sind über Prozesse im Diagramm verteilt, werden im oberen rechten Bereich jedoch als Teil derselben Aktivität angezeigt. In diesem Bereich sind Clientablaufverfolgungen für gesendete Nachrichten gefolgt von Dienstablaufverfolgungen für empfangene und verarbeitete Nachrichten zu sehen.
Die folgenden Abbildungen zeigen eine Diagrammansicht von WCF-Client- und Dienstaktivitäten
Im folgenden Fehlerszenario werden Fehler- und Warnungsablaufverfolgungen im Dienst und auf dem Client verknüpft. Zunächst wird eine Ausnahme in Benutzercode für den Dienst ausgelöst (grüne Aktivität ganz rechts mit einer Warnungsablaufverfolgung für die Ausnahme "The service cannot process this request in user code", "Der Dienst kann diese Anforderung nicht in Benutzercode verarbeiten"). Beim Senden der Antwort an den Client wird erneut eine Warnungsablaufverfolgung ausgegeben, um die Fehlernachricht anzugeben (rosafarbene Aktivität links). Der Client schließt sodann seinen WCF-Client (gelbe Aktivität unten links), der die Verbindung zum Dienst abbricht. Der Dienst löst einen Fehler aus (längste rosafarbene Aktivität rechts).
Dienst- und clientübergreifende Fehlerkorrelation
Das Beispiel, das verwendet wird, um diese Ablaufverfolgungen zu generieren, ist eine Reihe von synchronen Anforderungen mit der Bindung wsHttpBinding. Abweichungen von diesem Diagramm treten bei Szenarien ohne Sicherheit oder bei asynchronen Anforderungen auf, bei denen die ProcessAction-Aktivität die Anfangs- und Endvorgänge umfasst, die den asynchronen Aufruf bilden, und Übertragungen zu einer Rückrufaktivität zeigt. Weitere Informationen zu zusätzlichen Szenarien finden Sie unter End-to-End-Ablaufverfolgungsszenarien.
Problembehandlung mit Service Trace Viewer
Wenn Sie Ablaufverfolgungsdateien in das Service Trace Viewer-Tool laden, können Sie jede beliebige rote oder gelbe Aktivität im linken Bereich auswählen, um die Ursache für ein Problem in Ihrer Anwendung zu ermitteln. Die Aktivität 000 verfügt i. d. R. über nicht behandelte Ausnahmen, mit denen sich der Benutzer befassen muss.
Die folgende Abbildung zeigt, wie Sie eine rote oder gelbe Aktivität auswählen, um den Stamm eines Problems zu finden.
Im oberen rechten Bereich können Sie Ablaufverfolgungen für die Aktivität prüfen, die Sie auf der linken Seite ausgewählt haben. Sie können dann rote oder gelbe Ablaufverfolgungen in diesem Bereich prüfen und sehen, wie sie korrelieren. Im vorangehenden Diagramm sind Warnungsablaufverfolgungen sowohl für den Client als auch für den Dienst in derselben Process Action-Aktivität erkennbar.
Wenn diese Ablaufverfolgungen nicht auf die Grundursache des Fehlers schließen lassen, können Sie auf die ausgewählte Aktivität im linken Bereich doppelklicken (hier Process Action). Das Diagramm mit den zugehörigen Aktivitäten wird dann angezeigt. Anschließend können Sie verwandte Aktivitäten erweitern (indem Sie auf die "+"-Zeichen klicken), um die erste ausgelassene Ablaufverfolgung in Rot oder Gelb in einer verwandten Aktivität zu finden. Erweitern Sie nach und nach die Aktivitäten, die direkt vor der betreffenden roten oder gelben Ablaufverfolgung ausgeführt wurden, und verfolgen Sie die Übertragungen zu verknüpften Aktivitäten oder Nachrichtenflüsse über Endpunkte hinweg, bis Sie die Grundursache des Problems gefunden haben.
Erweitern von Aktivitäten zur Ermittlung der Ursache eines Problems
Wenn die ServiceModel ActivityTracing
deaktiviert, aber die ServiceModel-Ablaufverfolgung aktiviert ist, werden ServiceModel-Ablaufverfolgungen in der Aktivität 0000 ausgegeben. In diesem Fall ist es jedoch aufwändiger, die Korrelation dieser Ablaufverfolgungen zu verstehen.
Wenn die Nachrichtenprotokollierung aktiviert ist, können Sie auf der Registerkarte Nachricht nachsehen, welche Nachricht vom Fehler betroffen ist. Wenn Sie auf eine rote oder gelbe Nachricht doppelklicken, wird die Diagrammansicht der zugehörigen Aktivitäten angezeigt. Das sind die Aktivitäten, die am engsten mit der Anforderung verknüpft sind, bei der ein Fehler aufgetreten ist.
Um mit der Problembehandlung zu beginnen, können Sie auch eine rote oder gelbe Nachrichtenablaufverfolgung auswählen und darauf doppelklicken, um die Ursache zu verfolgen.