Freigeben über


Analytische Ablaufverfolgung von WCF

Das WCFAnalyticTracingExtensibility-Beispiel veranschaulicht, wie Sie eigene Ablaufverfolgungsereignisse in den Datenstrom von Analyseablaufverfolgungen hinzufügen, die Windows Communication Foundation (WCF) in die ETW in .NET Framework schreibt. Analytische Ablaufverfolgungen sollen die Dienste sichtbar machen, ohne die Leistung deutlich zu beeinträchtigen. In diesem Beispiel wird gezeigt, wie Sie mithilfe der System.Diagnostics.Eventing-APIs Ereignisse schreiben, die in WCF-Dienste integriert sind.

Weitere Informationen zu den System.Diagnostics.Eventing-APIs finden Sie unter System.Diagnostics.Eventing.

Weitere Informationen zur Ereignisablaufverfolgung in Windows finden Sie unter Verbesserung der Debugging- und Leistungsoptimierung mit ETW.

Freigeben von EventProvider

In diesem Beispiel wird die System.Diagnostics.Eventing.EventProvider-Klasse verwendet, die System.IDisposable implementiert. Bei der Implementierung der Ablaufverfolgung für einen WCF-Dienst ist es wahrscheinlich, dass Sie die Ressourcen des EventProvider für die Lebensdauer des Diensts verwenden können. Aus diesem Grund und zur besseren Lesbarkeit gibt das Beispiel nie die eingebundene EventProvider frei. Wenn der Dienst aus irgendeinem Grund andere Anforderungen an die Ablaufverfolgung stellt und Sie diese Ressource freigeben müssen, sollten Sie dieses Beispiel in Übereinstimmung mit den empfohlenen Vorgehensweisen zum Freigeben von nicht verwalteten Ressourcen ändern. Weitere Informationen zum Löschen nicht verwalteter Ressourcen finden Sie unter Implementieren einer Dispose-Methode.

Selbsthosting gegenüber Webhosting

Für im Internet gehostete Dienste stellen die analytischen Ablaufverfolgungen von WCF ein Feld mit dem Namen „HostReference“ bereit, das zur Identifizierung des Diensts verwendet wird, der die Ablaufverfolgungen ausgibt. Die erweiterbaren Benutzerablaufverfolgungen können in diesem Modell verwendet werden, und dieses Beispiel zeigt die entsprechenden empfohlenen Vorgehensweisen. Wenn der senkrechte Strich '|' in der Ergebniszeichenfolge tatsächlich angezeigt wird, kann der Webhostverweis in einem der folgenden Formate vorliegen:

  • Wenn sich die Anwendung nicht im Stammverzeichnis befindet.

    <SiteName><ApplicationVirtualPath>|<ServiceVirtualPath>|<ServiceName>

  • Wenn sich die Anwendung im Stammverzeichnis befindet.

    <SiteName>|<ServiceVirtualPath>|<ServiceName>

Bei selbst gehosteten Diensten wird das Feld „HostReference“ von den analytischen Ablaufverfolgungen von WCF nicht aufgefüllt. Die WCFUserEventProvider-Klasse in diesem Beispiel verhält sich konsistent, wenn sie von einem selbst gehosteten Dienst verwendet wird.

Details der benutzerdefinierten Ereignisse

Das ETW-Ereignisanbietermanifest von WCF definiert drei Ereignisse, die von WCF-Dienstautoren aus dem Dienstcode ausgegeben werden sollen. In der folgenden Tabelle werden die drei Ereignisse aufgelistet.

Ereignis BESCHREIBUNG Ereignis-ID
UserDefinedInformationEventOccurred Geben Sie dieses Ereignis bei einem Vorfall im Dienst aus, bei dem es sich nicht um ein Problem handelt. Sie könnten z. B. ein Ereignis nach dem erfolgreichen Aufruf einer Datenbank ausgeben. 301
UserDefinedWarningOccurred Geben Sie dieses Ereignis aus, wenn ein Problem auftritt, das möglicherweise in der Zukunft einen Fehler verursacht. Wenn beispielsweise der Aufruf einer Datenbank fehlschlägt, Sie jedoch auf einen redundanten Datenspeicher zurückgreifen können, können Sie ein Warnereignis ausgeben. 302
UserDefinedErrorOccurred Geben Sie dieses Ereignis aus, wenn sich der Dienst nicht den Erwartungen entsprechend verhält. Sie könnten dieses Ereignis z. B. ausgeben, wenn der Aufruf einer Datenbank fehlschlägt und Sie die Daten nicht von einer anderen Stelle abrufen können. 303

So verwenden Sie dieses Beispiel

  1. Öffnen Sie mit Visual Studio die Projektmappendatei WCFAnalyticTracingExtensibility.sln.

  2. Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.

  3. Drücken Sie STRG+F5, um die Projektmappe auszuführen.

    Klicken Sie im Webbrowser auf Calculator.svc. Der URI des WSDL-Dokuments für den Dienst wird daraufhin im Browser angezeigt. Kopieren Sie diesen URI.

  4. Führen Sie den WCF-Testclient (WcfTestClient.exe) aus.

    Der WCF-Testclient (WcfTestClient.exe) befindet sich unter \<Visual Studio Install Dir>\Common7\IDE\WcfTestClient.exe.

  5. Fügen Sie im WCF-Testclient den Dienst hinzu, indem Sie Datei und dann Dienst hinzufügen auswählen.

    Fügen Sie die Endpunktadresse im Eingabefeld hinzu.

  6. Klicken Sie auf OK, um das Dialogfeld zu schließen.

    Der ICalculator-Dienst wird im linken Bereich unter Meine Dienstprojekte hinzugefügt.

  7. Öffnen Sie die Ereignisanzeige.

    Starten Sie vor dem Aufrufen des Diensts die Ereignisanzeige. Stellen Sie sicher, dass das Ereignisprotokoll auf das Nachverfolgen von Ereignissen lauscht, die vom WCF-Dienst ausgegeben werden.

  8. Wählen Sie im Menü Start die Option Verwaltungstools und dann Ereignisanzeige aus. Aktivieren Sie die Protokolle Analytisch und Debuggen.

  9. Navigieren Sie in der Strukturansicht der Ereignisanzeige zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows und dann zu Anwendungsserveranwendungen. Klicken Sie mit der rechten Maustaste auf Anwendungsserveranwendungen, und wählen Sie Ansicht und dann Analyse- und Debugprotokolle anzeigen aus.

    Stellen Sie sicher, dass die Option Analyse- und Debugprotokolle anzeigen aktiviert ist. Aktivieren Sie das Protokoll Analytisch.

    Navigieren Sie in der Strukturansicht der Ereignisanzeige zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows, Anwendungsserveranwendungen und dann zu Analytisch. Klicken Sie mit der rechten Maustaste auf Analytisch, und wählen Sie Protokoll aktivieren aus.

  10. Testen Sie den Dienst mit dem WCF-Testclient.

    1. Doppelklicken Sie im WCF-Testclient unter dem ICalculator-Dienstknoten auf Add().

      Die Methode Add() wird im rechten Bereich mit zwei Parametern angezeigt.

    2. Geben Sie für den ersten Parameter 2 und für den zweiten Parameter 3 ein.

    3. Klicken Sie auf Aufrufen, um die Methode aufzurufen.

  11. Wechseln Sie zum Fenster Ereignisanzeige, das bereits geöffnet ist. Navigieren Sie zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows, Anwendungsserveranwendungen.

  12. Klicken Sie mit der rechten Maustaste auf den Knoten Analytisch, und wählen Sie Aktualisieren aus.

    Die Ereignisse werden im rechten Bereich angezeigt.

  13. Suchen Sie das Ereignis mit der ID 303, und doppelklicken Sie darauf, um es zu öffnen und seinen Inhalt zu untersuchen.

    Dieses Ereignis wurde von der Add()-Methode des ICalculator-Diensts ausgegeben und verfügt über Nutzdaten gleich „2+3=5“.

So führen Sie eine Bereinigung aus (optional)

  1. Öffnen Sie die Ereignisanzeige.

  2. Navigieren Sie zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows und dann zu Anwendungsserveranwendungen. Klicken Sie mit der rechten Maustaste auf Analytisch, und wählen Sie Protokoll deaktivieren aus.

  3. Navigieren Sie zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows, Anwendungsserveranwendungen und dann zu Analytisch. Klicken Sie mit der rechten Maustaste auf Analytisch, und wählen Sie Protokoll löschen aus.

  4. Klicken Sie auf Löschen, um die Ereignisse zu löschen.

Bekanntes Problem

Es gibt ein bekanntes Problem in der Ereignisanzeige, bei dem bei der Decodierung von ETW-Ereignissen ein Fehler auftritt. Die folgende Fehlermeldung wird möglicherweise angezeigt: „Die Beschreibung für die Ereignis-ID <id> aus der Quelle „Microsoft Windows-Anwendungsserveranwendungen“ wurde nicht gefunden. Entweder ist die Komponente, die dieses Ereignis auslöst, auf Ihrem lokalen Computer nicht installiert, oder die Installation ist beschädigt. Sie können die Komponente auf dem lokalen Computer installieren oder reparieren.“ Wenn dieser Fehler auftritt, wählen Sie im Menü Aktionen die Option Aktualisieren aus. Das Ereignis sollte dann ordnungsgemäß decodiert werden.

Weitere Informationen