Analytische Ablaufverfolgung von WCFWCF Analytic Tracing

In diesem Beispiel wird veranschaulicht, wie Ihre eigenen Ablaufverfolgungsereignisse in den Stream der analytischen ablaufverfolgungen hinzufügen, die Windows Communication Foundation (WCF) in in ETW schreibt .NET Framework 4.6.1.NET Framework 4.6.1.This sample demonstrates how to add your own tracing events into the stream of analytic traces that Windows Communication Foundation (WCF) writes to ETW in .NET Framework 4.6.1.NET Framework 4.6.1. Analytische Ablaufverfolgungen sollen die Dienste sichtbar machen, ohne die Leistung deutlich zu beeinträchtigen.Analytic traces are meant to make it easy to get visibility into your services without paying a high performance penalty. Dieses Beispiel zeigt, wie die System.Diagnostics.Eventing APIs, um Ereignisse zu schreiben, die mit WCF-Diensten integrieren.This sample shows how to use the System.Diagnostics.Eventing APIs to write events that integrate with WCF services.

Weitere Informationen zu den System.Diagnostics.Eventing -APIs finden Sie unter System.Diagnostics.Eventing.For more information about the System.Diagnostics.Eventing APIs, see System.Diagnostics.Eventing.

Weitere Informationen zu der ereignisablaufverfolgung in Windows finden Sie unter verbessertes Debugging und Leistungsoptimierung mit ETW.To learn more about event tracing in Windows, see Improve Debugging and Performance Tuning with ETW.

Freigeben von EventProviderDisposing EventProvider

In diesem Beispiel wird die System.Diagnostics.Eventing.EventProvider-Klasse verwendet, die System.IDisposable implementiert.This sample uses the System.Diagnostics.Eventing.EventProvider class, which implements System.IDisposable. Bei der Ablaufverfolgung für einen WCF-Dienst zu implementieren, ist es wahrscheinlicher, dass Sie möglicherweise die EventProviderder Ressourcen für die Lebensdauer des Diensts.When implementing tracing for a WCF service, it is likely that you may use the EventProvider’s resources for the lifetime of the service. Aus diesem Grund und zur besseren Lesbarkeit gibt das Beispiel nie die eingebundene EventProvider frei.For this reason, and for readability, this sample never disposes of the wrapped EventProvider. 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.If for some reason your service has different requirements for tracing and you must dispose of this resource, then you should modify this sample in accordance with the best practices for disposing of unmanaged resources. Weitere Informationen zu nicht verwaltete Ressourcen freigibt, finden Sie unter Implementieren einer Dispose-Methode.For more information about disposing unmanaged resources, see Implementing a Dispose Method.

Selbsthosting gegenüber WebhostingSelf-Hosting vs. Web Hosting

Für im Web gehostete Dienste bieten analytischen ablaufverfolgungen von WCF ein Feld mit dem Namen "hostreference" bereit, die verwendet wird, um den Dienst zu identifizieren, der die ablaufverfolgungen ausgibt.For Web-hosted services, WCF’s analytic traces provide a field, called "HostReference", which is used to identify the service that is emitting the traces. Die erweiterbaren Benutzerablaufverfolgungen können in diesem Modell verwendet werden, und dieses Beispiel zeigt die entsprechenden empfohlenen Vorgehensweisen.The extensible user traces can participate in this model and this sample demonstrates best practices for doing so. Das Format von einem Webhost zu verweisen, wenn die Pipe "|" Zeichen tatsächlich angezeigt wird, in die resultierende Zeichenfolge kann eine der folgenden sein:The format of a Web host reference when the pipe ‘|’ character actually appears in the resulting string can be any one of the following:

  • Wenn sich die Anwendung nicht im Stammverzeichnis befindet.If the application is not at the root.

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

  • Wenn sich die Anwendung im Stammverzeichnis befindet.If the application is at the root.

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

Für selbst gehostete Dienste Auffüllen nicht das Feld "HostReference" analytischen ablaufverfolgungen von WCF.For self-hosted services, WCF’s analytic traces do not populate the "HostReference" field. Die WCFUserEventProvider-Klasse in diesem Beispiel verhält sich konsistent, wenn sie von einem selbst gehosteten Dienst verwendet wird.The WCFUserEventProvider class in this sample behaves consistently when used by a self-hosted service.

Details der benutzerdefinierten EreignisseCustom Event Details

WCF definiert ETW-Ereignisanbieter drei Ereignisse, die von WCF-Dienst-Autoren von innerhalb der Dienstcode ausgegeben werden sollen.WCF’s ETW Event Provider manifest defines three events that are designed to be emitted by WCF service authors from within service code. In der folgenden Tabelle werden die drei Ereignisse aufgelistet.The following table shows a breakdown of the three events.

eventEvent BeschreibungDescription Ereignis-IDEvent ID
UserDefinedInformationEventOccurredUserDefinedInformationEventOccurred Geben Sie dieses Ereignis bei einem Vorfall im Dienst aus, bei dem es sich nicht um ein Problem handelt.Emit this event when something of note happens in your service that is not a problem. Sie könnten z. B. ein Ereignis nach dem erfolgreichen Aufruf einer Datenbank ausgeben.For example, you might emit an event after successfully making a call to a database. 301301
UserDefinedWarningOccurredUserDefinedWarningOccurred Geben Sie dieses Ereignis aus, wenn ein Problem auftritt, das möglicherweise in der Zukunft einen Fehler verursacht.Emit this event when a problem occurs that may result in a failure in the future. Wenn beispielsweise der Aufruf einer Datenbank fehlschlägt, Sie jedoch auf einen redundanten Datenspeicher zurückgreifen können, können Sie ein Warnereignis ausgeben.For example, you may emit a warning event when a call to a database fails but you were able to recover by falling back to a redundant data store. 302302
UserDefinedErrorOccurredUserDefinedErrorOccurred Geben Sie dieses Ereignis aus, wenn sich der Dienst nicht den Erwartungen entsprechend verhält.Emit this event when your service fails to behave as expected. 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.For example, you might emit an event if a call to a database fails and you could not retrieve the data from elsewhere. 303303

So verwenden Sie dieses BeispielTo use this sample

  1. Öffnen Sie die Projektmappendatei WCFAnalyticTracingExtensibility.sln in Visual Studio 2012Visual Studio 2012.Using Visual Studio 2012Visual Studio 2012, open the WCFAnalyticTracingExtensibility.sln solution file.

  2. Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.To build the solution, press CTRL+SHIFT+B.

  3. Drücken Sie STRG+F5, um die Projektmappe auszuführen.To run the solution, press CTRL+F5.

    Klicken Sie in den Webbrowser auf Calculator.svc.In the Web browser, click Calculator.svc. Der URI des WSDL-Dokuments für den Dienst wird daraufhin im Browser angezeigt.The URI of the WSDL document for the service should appear in the browser. Kopieren Sie diesen URI.Copy that URI.

  4. Führen Sie den WCF-Testclient (WcfTestClient.exe).Run the WCF test client (WcfTestClient.exe).

    WCF-Testclient (WcfTestClient.exe) befindet sich der < Visual Studio 2012Visual Studio 2012 -Installationsverzeichnis > \Common7\IDE\ WcfTestClient.exe (Standardeinstellung Visual Studio 2012Visual Studio 2012 Installationsverzeichnis ist C:\Program Files\Microsoft Visual Studio 10.0).The WCF test client (WcfTestClient.exe) is located in the <Visual Studio 2012Visual Studio 2012 Install Dir>\Common7\IDE\ WcfTestClient.exe (default Visual Studio 2012Visual Studio 2012 install dir is C:\Program Files\Microsoft Visual Studio 10.0).

  5. Fügen Sie innerhalb der WCF-Testclient den Dienst, indem Sie auswählen Datei, und klicken Sie dann Dienst hinzufügen.Within the WCF test client, add the service by selecting File, and then Add Service.

    Fügen Sie die Endpunktadresse im Eingabefeld hinzu.Add the endpoint address in the input box.

  6. Klicken Sie auf OK um das Dialogfeld zu schließen.Click OK to close the dialog.

    Der ICalculator-Dienst wird im linken Bereich unter hinzugefügt Meine Dienstprojekte.The ICalculator service is added in the left pane under My Service Projects.

  7. Öffnen Sie die Ereignisanzeige.Open the Event Viewer application.

    Vor dem Aufrufen des Diensts die Ereignisanzeige starten, und stellen Sie sicher, dass das Ereignisprotokoll eine Überwachung für vom WCF-Dienst ausgegebene Überwachungsereignisse ausführt.Before invoking the service, start Event Viewer and ensure that the event log is listening for tracking events emitted from the WCF service.

  8. Aus der starten klicken Sie im Menü Verwaltung, und klicken Sie dann Ereignisanzeige.From the Start menu, select Administrative Tools, and then Event Viewer. Aktivieren der analytisch und Debuggen Protokolle.Enable the Analytic and Debug logs.

  9. Wechseln Sie in der Strukturansicht in der Ereignisanzeige zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows, und klicken Sie dann Anwendungsserver-Anwendungen.In the tree view in Event Viewer, navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, and then Application Server-Applications. Mit der rechten Maustaste Anwendungsserver-AnwendungenOption Ansicht, und klicken Sie dann anzeigen analytische und Debugprotokolle.Right-click Application Server-Applications, select View, and then Show Analytic and Debug Logs.

    Sicherstellen, dass die anzeigen analytische und Debugprotokolle Option aktiviert ist.Ensure that the Show Analytic and Debug Logs option is checked. Aktivieren der analytisch Protokoll.Enable the Analytic log.

    Wechseln Sie in der Strukturansicht in der Ereignisanzeige zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows, Anwendungsserver-Anwendungen, und klicken Sie dann analytische.In the tree view in Event Viewer, navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, Application Server-Applications, and then Analytic. Mit der rechten Maustaste analytisch , und wählen Sie Protokoll aktivieren.Right-click Analytic and select Enable Log.

  10. Testen Sie den Dienst mit dem WCF-Testclient.Test the service using the WCF Test Client.

    1. Doppelklicken Sie im WCF-Testclient auf Add() unter dem Knoten ICalculator-Dienst.In the WCF Test Client, double-click Add() under the ICalculator service node.

      Die Add() -Methode wird im rechten Bereich mit zwei Parametern angezeigt.The Add() method appears in the right pane with two parameters.

    2. Geben Sie für den ersten Parameter 2 und für den zweiten Parameter 3 ein.Type in 2 for the first parameter and 3 for the second parameter.

    3. Klicken Sie auf Invoke zum Aufrufen der Methode.Click Invoke to invoke the method.

  11. Wechseln Sie zu der Ereignisanzeige Fenster, das bereits geöffnet ist.Go to the Event Viewer window that you have already opened. Navigieren Sie zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows, Anwendung Server-Applications.Navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, Application Server-Applications.

  12. Mit der rechten Maustaste die analytisch Knoten, und wählen aktualisieren.Right-click the Analytic node and select Refresh.

    Die Ereignisse werden im rechten Bereich angezeigt.The events appear in the right pane.

  13. Suchen Sie das Ereignis mit der ID 303, und doppelklicken Sie darauf, um es zu öffnen und seinen Inhalt zu untersuchen.Locate the event with the ID of 303 and double-click it to open it up and inspect its contents.

    Dieses Ereignis ausgegeben wurde, durch die Add() -Methode des ICalculator-Diensts und weist eine Nutzlast gleich "2 + 3 = 5".This event was emitted by the Add() method of the ICalculator service and has a payload equal to "2+3=5".

So führen Sie eine Bereinigung aus (optional)To clean up (Optional)

  1. Open Ereignisanzeige.Open Event Viewer.

  2. Navigieren Sie zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows, und klicken Sie dann Anwendungsserver-Anwendungen.Navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, and then Application-Server-Applications. Mit der rechten Maustaste analytisch , und wählen Sie Protokoll deaktivieren.Right-click Analytic and select Disable Log.

  3. Navigieren Sie zu Ereignisanzeige, Anwendungs- und Dienstprotokolle, Microsoft, Windows, Anwendungsserver-Anwendungen, und klicken Sie dann analytische.Navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, Application-Server-Applications, and then Analytic. Mit der rechten Maustaste analytisch , und wählen Sie Protokoll löschen.Right-click Analytic and select Clear Log.

  4. Klicken Sie auf deaktivieren um die Ereignisse zu löschen.Click Clear to clear the events.

Bekanntes ProblemKnown Issue

Es ist ein bekanntes Problem in der Ereignisanzeige , in denen sie möglicherweise ein Fehler Decodierung von ETW-Ereignissen.There is a known issue in the Event Viewer where it may fail to decode ETW events. Möglicherweise eine Fehlermeldung angezeigt: "die Beschreibung für Ereigniskennung <Id > aus der Quelle Microsoft Windows-Anwendungsserver-Anwendungen wurde nicht gefunden.You may see an error message that says: "The description for Event ID <id> from source Microsoft-Windows-Application Server-Applications cannot be found. Entweder ist die Komponente, die dieses Ereignis auslöst, nicht auf dem lokalen Computer installiert, oder die Installation ist beschädigt.Either the component that raises this event is not installed on your local computer or the installation is corrupted. Sie können installieren oder reparieren Sie die Komponente auf dem lokalen Computer."You can install or repair the component on the local computer." Wenn dieser Fehler auftritt, wählen Sie aktualisieren aus der Aktionen Menü.If you encounter this error, select Refresh from the Actions menu. Das Ereignis sollte dann ordnungsgemäß decodiert werden.The event should then decode properly.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your computer. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Management\ETWTrace

Siehe auchSee Also

Überwachen der AppFabric-BeispieleAppFabric Monitoring Samples