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
Mit dem Tool Windows Communication Foundation (WCF) Service Trace Viewer können Sie Diagnoseablaufverfolgungen korrelieren, die von WCF-Listenern erstellt wurden, um die Ursache eines Fehlers zu finden. Anhand dieses Tools können Sie mühelos Ablaufverfolgungen anzeigen, gruppieren und filtern, um Probleme mit WCF-Diensten zu diagnostizieren, zu reparieren und zu überprüfen. 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 Ablaufverfolgung und Nachrichtenprotokollierung bei Verwendung des Viewer für Dienstabläufe-Tools generiert wurden. 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, bei dem es sich um eine URL handelt, die auf einen technischen Microsoft-Verweis verweist, der weitere Informationen zur Ablaufverfolgung bereitstellt.
Alle diese Informationen können Sie im oberen rechten Bereich im Viewer für Dienstabläufe einsehen, oder bei Auswahl einer Ablaufverfolgung im Abschnitt Grundlegende Informationen in der formatierten Ansicht des unteren rechten Bereichs.
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 über die 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>
(Die Aktivitäts-ID wird beim Ausstellen der Ablaufverfolgung festgelegt).<Execution>
(Prozess- und Thread-ID).<Computer>
.<ExtendedData>
, einschließlich<Action>
,<MessageID>
und<ActivityId>
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="{bbbb1111-cc22-3333-44dd-555555eeeeee}"/>
<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="aaaa0000-bb11-2222-33cc-444444dddddd" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">bbbb1111-cc22-3333-44dd-555555eeeeee</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 einem anderen switchValue
als OFF und ActivityTracing
festgelegt wird, erstellt 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. Das wird durch Festlegen von propagateActivity
=true
an jedem Endpunkt während der Konfiguration erreicht. 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 für jeden Objektmodellaufruf eine WCF-Aktivität erstellt (z. B. Open ChannelFactory, Add, Dividieren usw.). Jeder der Vorgangsaufrufe wird in einer "Prozessaktion"-Aktivität verarbeitet.
Im folgenden Screenshot, der aus dem Beispiel Ablaufverfolgung und Nachrichtenprotokollierung stammt, wird im linken Fensterbereich die nach Erstellungsdauer geordnete Liste der Aktivitäten angezeigt, die im Clientprozess erstellt wurden. 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 werden Antwortnachrichten, die verarbeitet werden, zunächst in einer separaten Aktivität (Nachricht verarbeiten) dargestellt, bevor sie durch eine Übertragung mit der entsprechenden ProcessAction-Aktivität korreliert werden, die Anforderungsnachricht enthält. 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.
Das folgende Bild zeigt eine Liste der WCF-Clientaktivitäten nach Erstellungsdauer (linker Fensterbereich) und ihre geschachtelten Aktivitäten und Ablaufverfolgungen (oberer rechter Fensterbereich):
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 Sie auf die Process Action Add-Aktivität im linken Fensterbereich doppelklicken, wird eine grafische Darstellung der WCF-Clientaktivitäten für die Add-Aktion angezeigt. 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 die Umgebungsaktivität. Wenn dies nicht definiert ist, überträgt WCF von 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 einer sicheren 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. Die Antwort wird innerhalb derselben Aktivität empfangen, in der die Anforderung gesendet wurde.
Hier werden Clientablaufverfolgungen zur besseren Verdeutlichung geladen, jedoch werden Dienstablaufverfolgungen (empfangene Anforderungsnachrichten und gesendete Antwortnachrichten) in derselben Aktivität angezeigt, wenn auch sie in das Tool geladen werden und propagateActivity
auf true.
festgelegt wurde. Dies wird in einer Abbildung weiter unten deutlich.
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 ein Listener eine Kommunikationsanforderung erkennt, die von einem Client initiiert wurde, überträgt er sie an eine "Receive Bytes"-Aktivität (Byteempfangaktivität), 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.
Jeder Satz Bytes, der empfangen wird und einer Nachricht entspricht, wird in einer "Process Message"-Aktivität ("Nachricht verarbeiten") verarbeitet, bei der das WCF-Nachrichtenobjekt erstellt wird. 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. Von dieser Phase an profitieren Sie von der direkten Korrelation über Endpunkte hinweg, da alle in WCF ausgegebenen Ablaufverfolgungen, die mit der Anforderung verknüpft sind, in derselben Aktivität enthalten sind, einschließlich der Verarbeitung der Antwortnachricht.Als prozessexterne Aktion wird eine "Execute user Code"-Aktivität ("Benutzercode ausführen") erstellt, um die in Benutzercode ausgegebenen Ablaufverfolgungen von den in WCF ausgegebenen zu isolieren. Im vorangehenden Beispiel wird die Ablaufverfolgung "Service sends Add response" ("Dienst sendet Hinzufügen-Antwort") in der "Execute User code"-Aktivität ("Benutzercode ausführen") und nicht in der vom Client weitergegebenen 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 über zusätzliche 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 Grund 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. Sie können die verknüpften Aktivitäten dann erweitern (durch Klicken auf die "+"-Symbole), um nach der ersten rot oder gelb ausgegebenen Ablaufverfolgung in einer verknüpften Aktivität zu suchen. 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 ermitteln.