Traccia analitica WCFWCF Analytic Tracing

In questo esempio viene illustrato come aggiungere eventi di traccia nel flusso di tracce analitiche che Windows Communication Foundation (WCF) scrive in ETW in .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. Le tracce analitiche hanno lo scopo di semplificare la visibilità all'interno dei servizi senza un'elevata riduzione delle prestazioni.Analytic traces are meant to make it easy to get visibility into your services without paying a high performance penalty. In questo esempio viene illustrato come utilizzare il System.Diagnostics.Eventing API per scrivere eventi che si integrano con servizi WCF.This sample shows how to use the System.Diagnostics.Eventing APIs to write events that integrate with WCF services.

Per ulteriori informazioni sul System.Diagnostics.Eventing API, vedere System.Diagnostics.Eventing.For more information about the System.Diagnostics.Eventing APIs, see System.Diagnostics.Eventing.

Per ulteriori informazioni sulla traccia degli eventi di Windows, vedere migliora il debug e ottimizzazione delle prestazioni con ETW.To learn more about event tracing in Windows, see Improve Debugging and Performance Tuning with ETW.

Eliminazione di EventProviderDisposing EventProvider

In questo esempio viene utilizzata la classe System.Diagnostics.Eventing.EventProvider, che implementa System.IDisposable.This sample uses the System.Diagnostics.Eventing.EventProvider class, which implements System.IDisposable. Quando si implementa la funzionalità di traccia per un servizio WCF, è probabile che è possibile utilizzare il EventProviderdi risorse per la durata del servizio.When implementing tracing for a WCF service, it is likely that you may use the EventProvider’s resources for the lifetime of the service. Per tale motivo e per ragioni di leggibilità, in questo esempio l'oggetto EventProvider con wrapper non viene mai eliminato.For this reason, and for readability, this sample never disposes of the wrapped EventProvider. Se per qualche motivo il servizio ha requisiti diversi per la traccia ed è necessario eliminare tale risorsa, occorre modificare l'esempio in base alle procedure consigliate per l'eliminazione di risorse non gestite.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. Per ulteriori informazioni sull'eliminazione di risorse non gestite, vedere implementazione di un metodo Dispose.For more information about disposing unmanaged resources, see Implementing a Dispose Method.

Differenze tra self-hosting e hosting WebSelf-Hosting vs. Web Hosting

Per i servizi ospitati su Web, le tracce analitiche di WCF forniscono un campo, denominato "HostReference", viene utilizzato per identificare il servizio che sta generando le tracce.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. Le tracce utente estensibili possono far parte di tale modello e in questo esempio vengono descritte le procedure consigliate per effettuare tale operazione.The extensible user traces can participate in this model and this sample demonstrates best practices for doing so. Il formato di un host Web riferimento quando la pipe '|' caratteri in realtà il valore risultante stringa può essere uno dei seguenti:The format of a Web host reference when the pipe ‘|’ character actually appears in the resulting string can be any one of the following:

  • Se l'applicazione non è alla radice.If the application is not at the root.

    <Nome sito ><ApplicationVirtualPath >|<ServiceVirtualPath >|<ServiceName ><SiteName><ApplicationVirtualPath>|<ServiceVirtualPath>|<ServiceName>

  • Se l'applicazione è alla radice.If the application is at the root.

    <Nome sito >|<ServiceVirtualPath >|<ServiceName ><SiteName>|<ServiceVirtualPath>|<ServiceName>

Per i servizi indipendenti, le tracce analitiche di WCF non popolano il campo "HostReference".For self-hosted services, WCF’s analytic traces do not populate the "HostReference" field. La classe WCFUserEventProvider in questo esempio si comporta coerentemente quando viene utilizzata da un servizio indipendente.The WCFUserEventProvider class in this sample behaves consistently when used by a self-hosted service.

Informazioni dettagliate su eventi personalizzatiCustom Event Details

Manifesto del Provider di eventi ETW di WCF definisce tre eventi progettati per essere generati dagli autori di servizio WCF all'interno di codice del servizio.WCF’s ETW Event Provider manifest defines three events that are designed to be emitted by WCF service authors from within service code. Nella tabella riportata di seguito viene illustrata una suddivisione dei tre eventi.The following table shows a breakdown of the three events.

eventEvent DescrizioneDescription ID eventoEvent ID
UserDefinedInformationEventOccurredUserDefinedInformationEventOccurred Generare questo evento quando nel servizio si verifica un evento degno di nota che non è tuttavia un problema.Emit this event when something of note happens in your service that is not a problem. Ad esempio, è possibile generare un evento dopo avere effettuato correttamente una chiamata a un database.For example, you might emit an event after successfully making a call to a database. 301301
UserDefinedWarningOccurredUserDefinedWarningOccurred Generare questo evento quando si verifica un problema che potrebbe comportare un errore in futuro.Emit this event when a problem occurs that may result in a failure in the future. Ad esempio, è possibile generare un evento di avviso quando una chiamata a un database non riesce ma è comunque possibile recuperarla eseguendo il fallback a un archivio dati ridondante.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 Generare questo evento quando il comportamento del servizio non è quello previsto.Emit this event when your service fails to behave as expected. Ad esempio, è possibile generare un evento se una chiamata a un database non riesce e non è possibile recuperare i dati altrove.For example, you might emit an event if a call to a database fails and you could not retrieve the data from elsewhere. 303303

Per usare questo esempioTo use this sample

  1. Utilizzando Visual Studio 2012Visual Studio 2012, aprire il file della soluzione WCFAnalyticTracingExtensibility.sln.Using Visual Studio 2012Visual Studio 2012, open the WCFAnalyticTracingExtensibility.sln solution file.

  2. Per compilare la soluzione, premere CTRL+MAIUSC+B.To build the solution, press CTRL+SHIFT+B.

  3. Per eseguire la soluzione, premere CTRL+F5.To run the solution, press CTRL+F5.

    Nel Web browser, fare clic su Calculator.svc.In the Web browser, click Calculator.svc. L'URI del documento WSDL per il servizio viene visualizzato nel browser.The URI of the WSDL document for the service should appear in the browser. Copiare l'URI.Copy that URI.

  4. Eseguire il client di prova WCF (WcfTestClient.exe).Run the WCF test client (WcfTestClient.exe).

    Il client di prova WCF (WcfTestClient.exe) si trova nel < Visual Studio 2012Visual Studio 2012 directory di installazione > \Common7\IDE\ WcfTestClient.exe (impostazione predefinita Visual Studio 2012Visual Studio 2012 è c:\Programmi\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. All'interno del client di test WCF, aggiungere il servizio selezionando File, quindi Aggiungi servizio.Within the WCF test client, add the service by selecting File, and then Add Service.

    Aggiungere l'indirizzo dell'endpoint nella casella di input.Add the endpoint address in the input box.

  6. Fare clic su OK per chiudere la finestra di dialogo.Click OK to close the dialog.

    Il servizio ICalculator viene aggiunto nel riquadro sinistro sotto progetti di servizi.The ICalculator service is added in the left pane under My Service Projects.

  7. Aprire l'applicazione Visualizzatore eventi.Open the Event Viewer application.

    Prima di richiamare il servizio, avviare il Visualizzatore eventi e assicurarsi che il registro eventi sia in ascolto per rilevare eventi creati dal servizio WCF.Before invoking the service, start Event Viewer and ensure that the event log is listening for tracking events emitted from the WCF service.

  8. Dal avviare dal menu strumenti di amministrazionee quindi Visualizzatore eventi.From the Start menu, select Administrative Tools, and then Event Viewer. Abilitare il analitico e Debug log.Enable the Analytic and Debug logs.

  9. Nella visualizzazione struttura ad albero in Visualizzatore eventi, passare a Visualizzatore eventi, registri applicazioni e servizi, Microsoft, Windowse quindi Server applicazioni-applicazioni.In the tree view in Event Viewer, navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, and then Application Server-Applications. Fare doppio clic su Server applicazioni-applicazioniselezionare vistae quindi Visualizza registri analitici e Debug.Right-click Application Server-Applications, select View, and then Show Analytic and Debug Logs.

    Verificare che il Visualizza registri analitici e Debug opzione è selezionata.Ensure that the Show Analytic and Debug Logs option is checked. Abilitare il analitico log.Enable the Analytic log.

    Nella visualizzazione struttura ad albero in Visualizzatore eventi, passare a Visualizzatore eventi, registri applicazioni e servizi, Microsoft, Windows, Server applicazioni-applicazionie quindi analitiche.In the tree view in Event Viewer, navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, Application Server-Applications, and then Analytic. Fare doppio clic su analitico e selezionare Attiva registro.Right-click Analytic and select Enable Log.

  10. Testare il servizio usando il client di prova WCF.Test the service using the WCF Test Client.

    1. Nel Client di prova WCF fare doppio clic su Add nel nodo del servizio ICalculator.In the WCF Test Client, double-click Add() under the ICalculator service node.

      Il Add metodo verrà visualizzato nel riquadro a destra con due parametri.The Add() method appears in the right pane with two parameters.

    2. Digitare 2 per il primo parametro e 3 per il secondo parametro.Type in 2 for the first parameter and 3 for the second parameter.

    3. Fare clic su Invoke per richiamare il metodo.Click Invoke to invoke the method.

  11. Passare al Visualizzatore eventi finestra già aperta.Go to the Event Viewer window that you have already opened. Passare a Visualizzatore eventi, registri applicazioni e servizi, Microsoft, Windows, applicazione Applicazioni server.Navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, Application Server-Applications.

  12. Fare doppio clic su di analitico nodo e selezionare aggiornamento.Right-click the Analytic node and select Refresh.

    Gli eventi vengono visualizzati nel riquadro destro.The events appear in the right pane.

  13. Individuare l'evento con l'ID 303 e fare doppio clic per aprirlo e verificarne il contenuto.Locate the event with the ID of 303 and double-click it to open it up and inspect its contents.

    Questo evento viene generato dal Add() metodo del servizio ICalculator e ha un payload uguale a "2 + 3 = 5".This event was emitted by the Add() method of the ICalculator service and has a payload equal to "2+3=5".

Per eseguire la pulizia (facoltativo)To clean up (Optional)

  1. Aprire Visualizzatore eventi.Open Event Viewer.

  2. Passare a Visualizzatore eventi, registri applicazioni e servizi, Microsoft, Windowse quindi Server applicazioni-applicazioni.Navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, and then Application-Server-Applications. Fare doppio clic su analitico e selezionare Disattiva registro.Right-click Analytic and select Disable Log.

  3. Passare a Visualizzatore eventi, registri applicazioni e servizi, Microsoft, Windows, Server applicazioni-applicazionie quindi analitiche.Navigate to Event Viewer, Applications and Services Logs, Microsoft, Windows, Application-Server-Applications, and then Analytic. Fare doppio clic su analitico e selezionare Cancella Log.Right-click Analytic and select Clear Log.

  4. Fare clic su deselezionare per cancellare gli eventi.Click Clear to clear the events.

Problema notoKnown Issue

Si verifica un problema noto nel Visualizzatore eventi in cui potrebbe non riuscire a decodificare eventi ETW.There is a known issue in the Event Viewer where it may fail to decode ETW events. Si può vedere un messaggio di errore: "la descrizione per l'ID evento <id > dall'origine Microsoft-Windows-Application Server applicazioni non è state trovate.You may see an error message that says: "The description for Event ID <id> from source Microsoft-Windows-Application Server-Applications cannot be found. Il componente che ha generato l'evento non è installato nel computer locale oppure l'installazione è danneggiata.Either the component that raises this event is not installed on your local computer or the installation is corrupted. È possibile installare o ripristinare il componente nel computer locale."You can install or repair the component on the local computer." Se si verifica questo errore, selezionare aggiornamento dal azioni menu.If you encounter this error, select Refresh from the Actions menu. L'evento dovrebbe procedere alla decodifica in modo corretto.The event should then decode properly.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.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. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

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

Vedere ancheSee Also

Esempi di monitoraggio di AppFabricAppFabric Monitoring Samples