Freigeben über


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 beim Korrelieren von Diagnoseablaufverfolgungen, die von WCF-Listenern erstellt wurden, um die Ursache eines Fehlers zu finden. Das Tool bietet Ihnen eine Möglichkeit, Ablaufverfolgungen auf einfache Weise 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 Ablaufverfolgung und Nachrichtenprotokollierung bei Verwendung des Viewer für Dienstabläufe-Tools generiert wurden. In diesem Thema wird veranschaulicht, wie Sie Ablaufverfolgungsinhalte, Aktivitäten und deren Korrelation verstehen und wie Sie bei der Problembehandlung eine große Anzahl von Ablaufverfolgungen analysieren.

Anzeigen von Ablaufverfolgungsinhalt

Ein Trace-Event enthält die folgenden wichtigsten Informationen:

  • Aktivitätsname, wenn festgelegt.

  • Emissionszeit.

  • 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.

All diese Elemente werden im oberen rechten Bereich im Dienstablaufverfolgungs-Viewer oder im Abschnitt "Grundlegende Informationen " in der formatierten Ansicht des unteren rechten Bereichs angezeigt, wenn Sie eine Ablaufverfolgung auswählen.

Hinweis

Wenn sich der Client und der Dienst auf demselben Computer befinden, sind die Traces beider Anwendungen vorhanden. 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.

In der XML-Ansicht enthalten nützliche XML-Tags Folgendes:

  • <SubType> (Ablaufverfplgungsebene).

  • <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 "Nachricht über einen Kanal gesendet" untersuchen, 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 Prozessspuren gruppiert, die sich auf diese Verarbeitungseinheit beziehen. Sie können beispielsweise eine Aktivität für jede Anforderung definieren. Übertragungen erstellen eine kausale Beziehung zwischen Aktivitäten innerhalb von Endpunkten. 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, fehlerkorrelation durchzuführen. Auf diese Weise können Sie die Ursache eines Fehlers schneller finden.

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, extrahiert aus dem Beispiel zur Ablaufverfolgung und Nachrichtenprotokollierung , zeigt der linke Bereich die Liste der Aktivitäten an, die im Clientprozess erstellt wurden, sortiert nach Erstellungszeit. Es folgt eine chronologische Liste der Aktivitäten:

  • Kanalfactory erstellt (ClientBase).

  • Kanalfactory geöffnet.

  • Die Aktion "Hinzufügen" wurde verarbeitet.

  • Richten Sie die sichere Sitzung ein (dies ist bei der ersten Anforderung aufgetreten) und verarbeitet drei Antwortmeldungen der Sicherheitsinfrastruktur: RST, RSTR, SCT (Prozessnachricht 1, 2, 3).

  • Die Anforderungen für Subtrahieren, Multiplizieren und Dividieren wurden bearbeitet.

  • 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 (Nachrichtenverarbeitung) an, bevor wir sie mit der entsprechenden Aktivität für Prozessaktionen korrelieren, die die Anforderungsnachricht enthält, durch einen Transfer. Dies geschieht für Infrastrukturmeldungen und asynchrone Anforderungen und ist darauf zurückzuführen, dass wir die Nachricht überprüfen, den ActivityId-Header lesen und die vorhandene Prozessaktionsaktivität mit dieser ID identifizieren müssen, um sie zu korrelieren. Bei synchronen Anforderungen blockieren wir die Antwort und wissen daher, auf welche Prozessaktion sich die Antwort bezieht.

Das folgende Bild zeigt eine Liste der WCF-Clientaktivitäten nach Erstellungsdauer (linker Fensterbereich) und ihre geschachtelten Aktivitäten und Ablaufverfolgungen (oberer rechter Fensterbereich):

Screenshot mit wcf-Clientaktivitäten, die nach Erstellungszeit aufgelistet sind.

Wenn Sie im linken Bereich eine Aktivität auswählen, werden die verschachtelten Aktivitäten und Ablaufverfolgungen im rechten oberen Bereich angezeigt. Daher ist dies eine reduzierte hierarchische Ansicht der Liste der Aktivitäten auf der linken Seite, basierend auf der ausgewählten übergeordneten Aktivität. Da die ausgewählte Prozessaktion "Hinzufügen" die erste Anforderung darstellt, umfasst diese Aktivität die Aktivität "Sichere Sitzung einrichten" (Übertragung an, Zurückübertragung von) sowie Ablaufverfolgungen für die tatsächliche Verarbeitung der Aktion "Hinzufügen".

Wenn wir im linken Bereich auf die Prozessaktion "Aktivität hinzufügen" doppelklicken, wird eine grafische Darstellung der Client-WCF-Aktivitäten im Zusammenhang mit "Hinzufügen" 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. Hier wird die zweite Aktivität, Prozessaktion Hinzufügen, aus 0 übertragen. Anschließend wird „Setup Secure Session“ angezeigt.

Die folgende Abbildung zeigt eine Diagrammansicht der WCF-Clientaktivitäten, insbesondere Umgebungsaktivität (hier 0), Prozessaktion und Einrichten einer sicheren Sitzung:

Diagram im Trace Viewer zeigt Umgebungsaktivität und Prozessaktion.

Im oberen rechten Bereich sind alle Ablaufverfolgungen zu sehen, die mit der Process Action Add-Aktivität verknüpft sind. Insbesondere haben wir die Anforderungsnachricht ("Nachricht über einen Kanal gesendet") und die Antwort ("Empfangen einer Nachricht über einen Kanal") in derselben Aktivität empfangen. Dies wird in der folgenden Abbildung gezeigt. Aus Gründen der Übersichtlichkeit wird die Aktivität "Sichere Sitzung einrichten" 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.

Screenshot der Ablaufverfolgungsanzeige mit einer Liste von Ablaufverfolgungen für die Prozessaktionsaktivität

Hier laden wir Clientablaufverfolgungen zur besseren Übersichtlichkeit, aber Dienstablaufverfolgungen (Anforderungsnachricht empfangen und Antwortnachricht gesendet) erscheinen in derselben Aktivität, wenn sie auch im Tool geladen und propagateActivity auf true. festgelegt wurde, wie in einer späteren Abbildung gezeigt wird.

Beim Dienst wird das Aktivitätsmodell den WCF-Konzepten wie folgt zugeordnet:

  1. Wir erstellen und öffnen einen ServiceHost (dies kann mehrere hostbezogene Aktivitäten erstellen, z. B. im Fall von Sicherheit).

  2. Wir erstellen eine ListenAt-Aktivität für jeden Listener im ServiceHost (mit Übertragungen innerhalb und außerhalb von Open ServiceHost).

  3. Wenn der Listener eine vom Client initiierte Kommunikationsanforderung erkennt, wird sie an eine Aktivität "Empfangen von Bytes" übertragen, in der alle vom Client gesendeten Bytes verarbeitet werden. In dieser Aktivität können wir alle Verbindungsfehler sehen, die während der Clientdienstinteraktion aufgetreten sind.

  4. Für jeden empfangenen Bytesatz, der einer Nachricht entspricht, verarbeiten wir diese Bytes in einer Aktivität "Prozessnachricht", in der das WCF-Nachrichtenobjekt erstellt wird. In dieser Aktivität werden Fehler im Zusammenhang mit einem fehlerhaften Umschlag oder einer falsch formatierten Nachricht angezeigt.

  5. Sobald die Nachricht erstellt ist, wechseln wir zur Aktivität 'Prozessaktion'. Wenn propagateActivity sowohl beim Client als auch beim Dienst auf true gesetzt wird, hat diese Aufgabe dieselbe ID wie die im 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.

  6. 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 folgenden Abbildung ist die erste Aktivität auf der linken Seite die Stammaktivität (0000), die die Standardaktivität ist. Die nächsten drei Aktivitäten sind das Öffnen des ServiceHost. Die Aktivität in Spalte 5 ist der Listener, und die verbleibenden 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:

Screenshot des Trace Viewers mit einer Liste von WCF-Dienstaktivitäten

Der folgende Screenshot zeigt die Aktivitäten sowohl für den Client als auch für den Dienst und hebt die Aktivität zum Hinzufügen von Prozessaktionen über Prozesse hinweg (orange) hervor. Pfeile zeigen die Verbindung zwischen den Anforderungs- und Antwortnachrichten, die vom Client und Dienst gesendet und empfangen werden. Die Spuren der Prozessaktion sind über das Diagramm verteilt, werden jedoch als dieselbe Aktivität im oberen rechten Bereich angezeigt. In diesem Panel werden Clientablaufverfolgungen für gesendete Nachrichten angezeigt, gefolgt von Dienstablaufverfolgungen für empfangene und verarbeitete Nachrichten.

Die folgenden Abbildungen zeigen eine Diagrammansicht von WCF-Client- und Dienstaktivitäten.

Diagramm aus dem Trace Viewer, das sowohl die WCF-Client- als auch die Serviceaktivitäten zeigt.

Im folgenden Fehlerszenario sind Fehler- und Warnungsablaufverfolgungen beim Dienst und Client miteinander 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 dann seinen WCF-Client (gelbe Aktivität auf der unteren linken Seite), wodurch die Verbindung mit dem Dienst abgebrochen wird. Der Dienst löst einen Fehler aus (längste rosafarbene Aktivität rechts).

Verwenden der Ablaufverfolgungsanzeige-

Fehlerkorrelation zwischen Dienst und Client

Das Beispiel, das verwendet wird, um diese Ablaufverfolgungen zu generieren, ist eine Reihe von synchronen Anforderungen mit der Bindung wsHttpBinding. Es gibt Abweichungen von diesem Diagramm für Szenarien ohne Sicherheit oder mit asynchronen Anforderungen, bei denen die Prozessaktionsaktivität die Anfangs- und Endvorgänge umfasst, die den asynchronen Aufruf darstellen, und zeigt Übertragungen an eine Rückrufaktivität an. 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 Stamm eines Problems zu finden. Screenshot der roten oder gelben Aktivitäten zum Auffinden der Ursache eines Problems.

Im oberen rechten Bereich können Sie Spuren der Aktivität betrachten, die Sie auf der linken Seite ausgewählt haben. Anschließend können Sie rote oder gelbe Spuren in diesem Bereich untersuchen und sehen, wie sie korreliert werden. Im vorherigen Diagramm sehen wir Warnhinweise sowohl für den Client als auch für den Service in derselben Prozessaktion.

Wenn diese Spuren die Ursache des Fehlers nicht liefern, können Sie das Diagramm verwenden, indem Sie auf die ausgewählte Aktivität im linken Bereich doppelklicken (hier Prozessaktion). Das Diagramm mit verwandten 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 die Aktivitäten, die unmittelbar vor der roten oder gelben Spur, die von Interesse ist, aufgetreten sind. Folgen Sie den Übertragungen zu verwandten Aktivitäten oder Nachrichtenflüssen über Endpunkte hinweg, bis Sie die Ursache des Problems nachverfolgen.

Verwenden der Ablaufverfolgungsanzeige-

Erweitern von Aktivitäten zum Nachverfolgen der Ursache eines Problems

Wenn ServiceModel ActivityTracing deaktiviert ist, die ServiceModel-Ablaufverfolgung jedoch aktiviert ist, können Sie in der Aktivität 0000 die ServiceModel-Ablaufverfolgungen sehen. Dies erfordert jedoch mehr Aufwand, um die Korrelation dieser Spuren zu verstehen.

Wenn die Nachrichtenprotokollierung aktiviert ist, können Sie mithilfe der Registerkarte "Nachricht" sehen, welche Nachricht vom Fehler betroffen ist. Durch Doppelklicken auf eine Nachricht in Rot oder Gelb können Sie die Diagrammansicht der zugehörigen Aktivitäten sehen. Diese Aktivitäten sind die am ehesten mit der Anforderung verknüpft, bei der ein Fehler aufgetreten ist.

Screenshot von Trace Viewer mit aktivierter Nachrichtenprotokollierung.

Um mit der Problembehandlung zu beginnen, können Sie auch einen roten oder gelben Nachrichtenverlauf auswählen und darauf doppelklicken, um die Ursache zu ermitteln.

Siehe auch