Analytische Ablaufverfolgung von WCFWCF Analytic Tracing

In diesem Beispiel wird veranschaulicht, wie Sie Ihre eigenen Ablaufverfolgungsereignisse in den Stream der analytischen Ablaufverfolgungen hinzufügen können, die Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) in .NET Framework 4.6.1.NET Framework 4.6.1 in ETW schreibt.This sample demonstrates how to add your own tracing events into the stream of analytic traces that Windows Communication Foundation (WCF)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. In diesem Beispiel wird gezeigt, wie die System.Diagnostics.Eventing-APIs verwendet werden, um Ereignisse zu schreiben, die in WCFWCF-Dienste integriert werden.This sample shows how to use the System.Diagnostics.Eventing APIs to write events that integrate with WCFWCF services.

Weitere Informationen finden Sie unterFor more information about zu System.Diagnostics.Eventing-APIs finden Sie unter System.Diagnostics.Eventing. 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 Implementierung der Ablaufverfolgung für einen WCFWCF-Dienst verwenden Sie wahrscheinlich die EventProvider-Ressourcen für die Lebensdauer des Diensts.When implementing tracing for a WCFWCF 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 finden Sie unterFor more information aboutnicht verwaltete Ressourcen freigibt, finden Sie unter Implementieren einer Dispose-Methode. 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 WCFWCFdes analytische ablaufverfolgungen nicht das Feld "HostReference" auffüllen.For self-hosted services, WCFWCF’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

Der ETW-Ereignisanbieter von WCFWCF definiert drei Ereignisse, die von WCFWCF-Dienstautoren aus dem Dienstcode ausgegeben werden sollen.WCFWCF’s ETW Event Provider manifest defines three events that are designed to be emitted by WCFWCF 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 WCFWCF-Testclient (WcfTestClient.exe) aus.Run the WCFWCF test client (WcfTestClient.exe).

    Die WCFWCF -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 WCFWCF 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. Innerhalb der WCFWCF Client testen, fügen Sie den Dienst, indem Sie auswählen Datei, und klicken Sie dann Dienst hinzufügen.Within the WCFWCF 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.

    Starten Sie vor dem Aufrufen des Diensts die Ereignisanzeige, und stellen Sie sicher, dass das Ereignisprotokoll eine Überwachung für von WCFWCF 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 WCFWCF 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, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.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)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