Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'esempio EtwTracking illustra come abilitare il rilevamento di Windows Workflow Foundation (WF) in un servizio flusso di lavoro e generare gli eventi di rilevamento in Event Tracing for Windows (ETW). Per generare record di tracciamento del flusso di lavoro in ETW, l'esempio usa il partecipante di tracciamento ETW (EtwTrackingParticipant).
Il flusso di lavoro nell'esempio riceve una richiesta, assegna il reciproco dei dati di input alla variabile di input e restituisce il reciproco al client. Quando i dati di input sono 0, si verifica una divisione per zero eccezione che non viene gestita che causa l'interruzione del flusso di lavoro. Con il rilevamento abilitato, il record di traccia degli errori viene generato in ETW, che consente di risolvere l'errore in un secondo momento. Il partecipante al tracciamento ETW è configurato con un profilo di tracciamento per registrarsi ai record di tracciamento. Il profilo di rilevamento viene definito nel file Web.config e fornito come parametro di configurazione al partecipante del rilevamento ETW. Il partecipante al tracciamento ETW viene configurato nel file Web.config del servizio flusso di lavoro e viene applicato al servizio come un comportamento del servizio. In questo esempio vengono visualizzati gli eventi di rilevamento nel registro eventi usando il Visualizzatore eventi.
Dettagli di tracciamento del flusso di lavoro
Windows Workflow Foundation fornisce un'infrastruttura di rilevamento per tenere traccia dell'esecuzione di un'istanza del flusso di lavoro. Il runtime di rilevamento crea un'istanza del flusso di lavoro per generare eventi correlati al ciclo di vita del flusso di lavoro, eventi dalle attività del flusso di lavoro e eventi personalizzati. La tabella seguente illustra in dettaglio i componenti principali dell'infrastruttura di rilevamento.
| Componente | Descrizione |
|---|---|
| Durata di monitoraggio | Fornisce l'infrastruttura per generare record di rilevamento. |
| Monitoraggio dei partecipanti | Accede ai record di rilevamento. .NET Framework 4.6.1 viene fornito con un partecipante di rilevamento che scrive i record di rilevamento come eventi ETW (Event Tracing for Windows). |
| Profilo di tracciamento | Meccanismo di filtro che consente a un partecipante al monitoraggio di iscriversi a un insieme parziale dei record di monitoraggio generati da un'istanza del flusso di lavoro. |
La tabella seguente illustra in dettaglio i record di rilevamento generati dal runtime del flusso di lavoro.
| Registro di tracciamento | Descrizione |
|---|---|
| Registri di tracciamento dell'istanza del flusso di lavoro. | Descrive il ciclo di vita dell'istanza del flusso di lavoro. Ad esempio, un record di istanza viene generato all'avvio o al completamento del flusso di lavoro. |
| Record di rilevamento dello stato dell'attività. | Dettagli dell'esecuzione dell'attività. Questi record indicano lo stato di un'attività del flusso di lavoro, ad esempio quando un'attività è pianificata o quando l'attività viene completata o quando viene generato un errore. |
| Record di ripresa del segnalibro. | Generato ogni volta che viene ripreso un segnalibro all'interno di un'istanza del flusso di lavoro. |
| Record di rilevamento personalizzati. | Un autore del flusso di lavoro può creare record di rilevamento personalizzati e generarli all'interno dell'attività personalizzata. |
| ActivityScheduledRecord | Questo record viene generato quando un'attività pianifica un'altra attività. |
| FaultPropagationRecord | Questo record viene generato quando un errore viene propagato da un'attività. |
| CancelRequestedRecord | Questo record viene generato quando un'attività viene annullata da un'altra attività. |
Il partecipante si abbona a un sottoinsieme dei record di rilevamento generati usando i profili di rilevamento. Un profilo di monitoraggio contiene query che permettono di abbonarsi a un particolare tipo di record di tracciamento. I profili di rilevamento possono essere specificati nel codice o nella configurazione.
Per usare questo esempio
Usando Visual Studio, aprire il file della soluzione EtwTrackingParticipantSample.sln.
Per compilare la soluzione, premere CTRL+MAIUSC+B.
Per eseguire la soluzione, premere F5.
Per impostazione predefinita, il servizio è in ascolto sulla porta 53797 (
http://localhost:53797/SampleWorkflowService.xamlx).Usando Esplora file aprire il client di test WCF.
Il client di test WCF (WcfTestClient.exe) si trova nella <cartella> di installazione di Visual Studio\Common7\IDE\.
La cartella di installazione predefinita di Visual Studio è C:\Programmi\Microsoft Visual Studio 10.0.
Nel client di test WCF selezionare Aggiungi servizio dal menu File .
Aggiungere l'indirizzo dell'endpoint nella casella di input. Il valore predefinito è
http://localhost:53797/SampleWorkflowService.xamlx.Aprire l'applicazione Visualizzatore eventi.
Prima di richiamare il servizio, avviare Visualizzatore eventi dal menu Start , selezionare Esegui e digitare in
eventvwr.exe. Assicurarsi che il registro eventi sia in ascolto degli eventi di tracciamento generati dal servizio di flusso di lavoro.Nella visualizzazione albero del Visualizzatore eventi passare a Visualizzatore eventi, Registri applicazioni e servizi e Microsoft. Fare clic con il pulsante destro del mouse su Microsoft e scegliere Visualizza, quindi Abilita mostra log analitici e log di debug per abilitare i log analitici e di debug.
Verificare che l'opzione Mostra log analitici e di debug sia selezionata.
Nella visualizzazione albero in Visualizzatore eventi passare a Visualizzatore eventi, Registri applicazioni e servizi, Microsoft, Windows, Application Server-Applications. Fare clic con il pulsante destro del mouse su Analitica e selezionare Abilita log per abilitare il log analitico .
Testare il servizio usando il client di test WCF facendo doppio clic su
GetData.Questo apre il metodo
GetData. La richiesta accetta un parametro e garantisce che il valore sia 0, ovvero l'impostazione predefinita.Fare clic su Richiamare.
Osservare gli eventi generati dal flusso di lavoro.
Tornare a Visualizzatore eventi e passare a Visualizzatore eventi, Registri applicazioni e servizi, Microsoft, Windows, Application Server-Applications. Fare clic con il pulsante destro del mouse su Analisi e scegliere Aggiorna.
Gli eventi del flusso di lavoro vengono visualizzati nel visualizzatore eventi. Si noti che gli eventi di esecuzione del flusso di lavoro vengono visualizzati e che uno di essi è un'eccezione non gestita che corrisponde all'errore nel flusso di lavoro. Viene inoltre generato un evento di avviso dall'attività del flusso di lavoro, che indica che l'attività genera un errore.
Ripetere i passaggi 9 e 10 con un input di dati diversi da 0, in modo che non venga generato alcun errore.
I profili di rilevamento consentono di sottoscrivere eventi generati dal runtime quando lo stato di un'istanza del flusso di lavoro cambia. A seconda dei requisiti di monitoraggio, è possibile creare un profilo molto generico, che aderisce a un piccolo insieme di cambiamenti di stato di alto livello in un flusso di lavoro. D'altra parte, è possibile creare un profilo molto preciso il cui output è sufficientemente ricco da ricostruire l'esecuzione in un secondo momento. L'esempio illustra gli eventi emessi dal runtime del flusso di lavoro ad ETW usando HealthMonitoring Tracking Profile, che emette un piccolo insieme di eventi. Un profilo diverso che genera più eventi di rilevamento del flusso di lavoro viene fornito anche nel Web.config denominato Troubleshooting Tracking Profile. Quando è installato .NET Framework 4.6.1, nel file di Machine.config viene configurato un profilo predefinito con un nome vuoto. Questo profilo viene usato dalla configurazione del comportamento di rilevamento ETW quando non viene specificato alcun nome di profilo o un nome di profilo vuoto.
Il profilo di monitoraggio dell'integrità emette i record delle istanze del flusso di lavoro e i record di propagazione degli errori di attività. Questo profilo viene creato aggiungendo il profilo di rilevamento seguente a un file di configurazione Web.config.
<tracking>
<profiles>
<trackingProfile name="HealthMonitoring Tracking Profile">
<workflow activityDefinitionId="*">
<workflowInstanceQueries>
<workflowInstanceQuery>
<states>
<state name="Started"/>
<state name="Completed"/>
<state name="Aborted"/>
<state name="UnhandledException"/>
</states>
</workflowInstanceQuery>
</workflowInstanceQueries>
<faultPropagationQueries>
<faultPropagationQuery faultSourceActivityName ="*" faultHandlerActivityName="*"/>
</faultPropagationQueries>
</workflow>
</trackingProfile>
</profiles>
</tracking>
Il profilo può essere modificato modificando la EtwTrackingParticipant configurazione come segue.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="HealthMonitoring Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
Per eseguire la pulizia (facoltativo)
Aprire Visualizzatore eventi.
Passare a Visualizzatore eventi, Registri applicazioni e servizi, Microsoft, Windows, Application Server-Applications. Fare clic con il pulsante destro del mouse su Analisi e scegliere Disabilita log.
Passare a Visualizzatore eventi, Registri applicazioni e servizi, Microsoft, Windows, Application Server-Applications. Fare clic con il pulsante destro del mouse su Analisi e scegliere Cancella log.
Scegliere l'opzione Cancella per cancellare gli eventi.
Problema noto
Annotazioni
Si è verificato un problema noto nel Visualizzatore eventi in cui potrebbe non riuscire a decodificare gli eventi ETW. Potrebbe essere visualizzato un messaggio di errore simile al seguente.
Impossibile trovare la descrizione per l'ID evento <ID> dall'origine Microsoft-Windows-Application Server-Applications. Il componente che genera questo evento non è installato nel computer locale o l'installazione è danneggiata. È possibile installare o riparare il componente nel computer locale.
Se si verifica questo errore, fare clic su Aggiorna nel riquadro azioni. L'evento dovrebbe ora essere decodificato correttamente.