Traccia analitica WCF

L'esempio WCFAnalyticTracingExtensibility illustra come aggiungere eventi di traccia personalizzati nel flusso di tracce analitiche che Windows Communication Foundation (WCF) scrive in ETW in .NET Framework. Le tracce analitiche hanno lo scopo di semplificare la visibilità all'interno dei servizi senza un'elevata riduzione delle prestazioni. Questo esempio mostra come utilizzare le API System.Diagnostics.Eventing per scrivere eventi che si integrano con i servizi WCF.

Per altre informazioni sulle API System.Diagnostics.Eventing, vedere System.Diagnostics.Eventing.

Per ulteriori informazioni relative alla traccia di eventi in Windows, vedere Miglioramento del debug e ottimizzazione delle prestazioni con ETW.

Eliminazione di EventProvider

In questo esempio viene utilizzata la classe System.Diagnostics.Eventing.EventProvider, che implementa System.IDisposable. Quando si implementa la traccia per un servizio WCF, è possibile utilizzare le risorse di EventProvider per la durata del servizio. Per tale motivo e per ragioni di leggibilità, in questo esempio l'oggetto EventProvider con wrapper non viene mai eliminato. 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. Per altre informazioni sull'eliminazione di risorse non gestite, vedere Implementazione di un metodo Dispose.

Differenze tra self-hosting e hosting Web

Per i servizi ospitati sul Web, le tracce analitiche di WCF forniscono un campo, denominato "HostReference", utilizzato per identificare il servizio che sta generando le tracce. Le tracce utente estensibili possono far parte di tale modello e in questo esempio vengono descritte le procedure consigliate per effettuare tale operazione. Il formato di un riferimento dell'host Web quando il carattere barra verticale ("|") viene visualizzato nella stringa risultante può essere uno dei seguenti:

  • Se l'applicazione non è alla radice.

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

  • Se l'applicazione è alla radice.

    <SiteName>|<ServiceVirtualPath>|<ServiceName>

Per i servizi indipendenti, le tracce analitiche di WCF non popolano il campo "HostReference". La classe WCFUserEventProvider in questo esempio si comporta coerentemente quando viene utilizzata da un servizio indipendente.

Informazioni dettagliate su eventi personalizzati

Il manifesto del provider di eventi ETW di WCF definisce tre eventi progettati per essere generati dagli autori del servizio WCF dall'interno del codice del servizio. Nella tabella riportata di seguito viene illustrata una suddivisione dei tre eventi.

Event Descrizione ID evento
UserDefinedInformationEventOccurred Generare questo evento quando nel servizio si verifica un evento degno di nota che non è tuttavia un problema. Ad esempio, è possibile generare un evento dopo avere effettuato correttamente una chiamata a un database. 301
UserDefinedWarningOccurred Generare questo evento quando si verifica un problema che potrebbe comportare un errore in futuro. 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. 302
UserDefinedErrorOccurred Generare questo evento quando il comportamento del servizio non è quello previsto. Ad esempio, è possibile generare un evento se una chiamata a un database non riesce e non è possibile recuperare i dati altrove. 303

Per usare questo esempio

  1. Utilizzando Visual Studio, aprire il file della soluzione WCFAnalyticTracingExtensibility.sln.

  2. Per compilare la soluzione, premere CTRL+MAIUSC+B.

  3. Per eseguire la soluzione, premere CTRL+F5.

    Nel browser Web fare clic su Calculator.svc. L'URI del documento WSDL per il servizio viene visualizzato nel browser. Copiare l'URI.

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

    Il client di test WCF (WcfTestClient.exe) si trova in \<Visual Studio Install Dir>\Common7\IDE\WcfTestClient.exe.

  5. All'interno del client di test WCF aggiungere il servizio selezionando File, quindi Aggiungi servizio.

    Aggiungere l'indirizzo dell'endpoint nella casella di input.

  6. Fare clic su OK per chiudere la finestra di dialogo.

    Il servizio ICalculator viene aggiunto nel riquadro sinistro in Progetti di servizi.

  7. Aprire l'applicazione Visualizzatore eventi.

    Prima di richiamare il servizio, avviare Visualizzatore eventi e verificare che il registro eventi sia in ascolto per rilevare gli eventi generati dal servizio WCF.

  8. Nel menu Start selezionare Strumenti di amministrazione, quindi Visualizzatore eventi. Abilitare i registri Analitico e Debug.

  9. Nella visualizzazione albero di Visualizzatore eventi, passare a Visualizzatore eventi, Registri applicazioni e servizi, Microsoft, Windows, quindi Server applicazioni-Applicazioni. Fare clic con il pulsante destro del mouse su Server applicazioni-Applicazioni, scegliere Visualizza, quindi Visualizza registri analitici e di debug.

    Assicurarsi che l'opzione Visualizza registri analitici e di debug sia selezionata. Abilitare il log Analitico.

    Nella visualizzazione albero di Visualizzatore eventi, passare a Visualizzatore eventi, Log applicazioni e servizi, Microsoft, Windows, Server applicazioni-Applicazioni, quindi Analitico. Fare clic con il pulsante destro del mouse su Analitico e scegliere Abilita log.

  10. Testare il servizio usando il client di prova WCF.

    1. Nel client di test WCF fare doppio clic su Add() nel nodo del servizio ICalculator.

      Il metodo Add() viene visualizzato nel riquadro di destra con due parametri.

    2. Digitare 2 per il primo parametro e 3 per il secondo parametro.

    3. Fare clic su Richiama per richiamare il metodo.

  11. Andare alla finestra Visualizzatore eventi precedentemente aperta. Passare a Visualizzatore eventi, Registri applicazioni e servizi, Microsoft, Windows, Server applicazioni-Applicazioni.

  12. Fare clic con il pulsante destro del mouse sul nodo Analitico e scegliere Aggiorna.

    Gli eventi vengono visualizzati nel riquadro destro.

  13. Individuare l'evento con l'ID 303 e fare doppio clic per aprirlo e verificarne il contenuto.

    Questo evento viene generato dal metodo Add() del servizio ICalculator e ha un payload uguale a "2+3=5".

Per eseguire la pulizia (facoltativo)

  1. Aprire il Visualizzatore eventi.

  2. Passare a Visualizzatore eventi, Registri applicazioni e servizi, Microsoft, Windows, quindi Server applicazioni-Applicazioni. Fare clic con il pulsante destro del mouse su Analitico e selezionare Disabilita log.

  3. Passare a Visualizzatore eventi, Log applicazioni e servizi, Microsoft, Windows, Server applicazioni-Applicazioni, quindi Analitico. Fare clic con il pulsante destro del mouse su Analitico e selezionare Cancella log.

  4. Fare clic su Cancella per cancellare gli eventi.

Problema noto

Nel Visualizzatore eventi potrebbe non essere possibile decodificare gli eventi ETW. È possibile visualizzare un messaggio di errore con il testo seguente: "Impossibile trovare la descrizione per l'ID evento <id> dall'origine Microsoft-Windows-Server applicazioni-Applicazioni. Il componente che genera questo evento non è installato nel computer locale o l'installazione è danneggiata. È possibile installare o ripristinare il componente nel computer locale." Se si verifica questo errore, selezionare Aggiorna dal menu Azioni. L'evento dovrebbe procedere alla decodifica in modo corretto.

Vedi anche