Condividi tramite


Uso del Visualizzatore di traccia del servizio per la visualizzazione di tracce correlate e risoluzione dei problemi

In questo argomento viene descritto il formato dei dati di traccia, come visualizzarli e gli approcci che usano il Visualizzatore traccia del servizio per risolvere i problemi dell'applicazione.

Utilizzo dello Strumento di Visualizzazione delle Tracce del Servizio

Lo strumento Visualizzatore traccia del servizio Windows Communication Foundation (WCF) consente di correlare le tracce di diagnostica generate dai listener WCF per individuare la causa radice di un errore. Lo strumento consente di visualizzare, raggruppare e filtrare facilmente le tracce in modo da poter diagnosticare, ripristinare e verificare i problemi con i servizi WCF. Per altre informazioni sull'uso di questo strumento, vedere Service Trace Viewer Tool (SvcTraceViewer.exe).

Questo argomento contiene screenshot delle tracce generate eseguendo il campione Tracing and Message Logging, quando visualizzato utilizzando lo strumento Service Trace Viewer Tool (SvcTraceViewer.exe). In questo argomento viene illustrato come comprendere il contenuto di traccia, le attività e la relativa correlazione e come analizzare un numero elevato di tracce durante la risoluzione dei problemi.

Visualizzazione del contenuto della traccia

Un evento di traccia contiene le informazioni più significative seguenti:

  • Nome dell'attività quando impostato.

  • Tempo di emissione.

  • Livello di traccia.

  • Nome della sorgente della traccia.

  • Nome processo.

  • ID thread.

  • Identificatore di traccia univoco, ovvero un URL che punta a un riferimento tecnico Microsoft che fornisce altre informazioni correlate alla traccia.

Tutti questi elementi possono essere visualizzati nel pannello in alto a destra nel Visualizzatore traccia servizi o nella sezione Informazioni di base nella visualizzazione formattata del pannello in basso a destra quando si seleziona una traccia.

Annotazioni

Se il client e il servizio si trovano nello stesso computer, saranno presenti le tracce per entrambe le applicazioni. Questi valori possono essere filtrati usando la colonna Nome processo .

Inoltre, la visualizzazione formattata fornisce anche una descrizione per la traccia e informazioni dettagliate aggiuntive, se disponibili. Quest'ultimo può includere il tipo di eccezione e il messaggio, le tracce di chiamate, l'azione del messaggio, i campi da/a e altre informazioni sulle eccezioni.

Nella visualizzazione XML, i tag XML utili includono quanto segue:

  • <SubType> (livello di tracciamento).

  • <TimeCreated>.

  • <Source> (nome sorgente della traccia).

  • <Correlation> (identificativo attività impostato durante l'emissione della traccia).

  • <Execution> (ID thread e processo).

  • <Computer>.

  • <ExtendedData>, incluso <Action>, <MessageID> e il <ActivityId> impostato nell'intestazione del messaggio durante l'invio di un messaggio.

Se si esamina la traccia "Inviato un messaggio su un canale", è possibile che venga visualizzato il contenuto seguente.

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
   <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
      <EventID>262163</EventID>
      <Type>3</Type>
      <SubType Name="Information">0</SubType>
      <Level>8</Level>
      <TimeCreated SystemTime="2006-08-04T18:45:30.8491051Z" />
      <Source Name="System.ServiceModel" />
       <Correlation ActivityID="{bbbb1111-cc22-3333-44dd-555555eeeeee}"/>
       <Execution ProcessName="client" ProcessID="1808" ThreadID="1" />
       <Channel />
       <Computer>TEST1</Computer>
   </System>
   <ApplicationData>
       <TraceData>
          <DataItem>
             <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
                 <TraceIdentifier>http://msdn.microsoft.com/library/System.ServiceModel.Channels.MessageSent.aspx</TraceIdentifier>
                 <Description>Sent a message over a channel.</Description>
                 <AppDomain>client.exe</AppDomain>
                 <Source>System.ServiceModel.Channels.ClientFramingDuplexSessionChannel/35191196</Source>
                <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/MessageTransmitTraceRecord">

                  <MessageProperties>
                     <AllowOutputBatching>False</AllowOutputBatching>
                  </MessageProperties>
                  <MessageHeaders>
                     <Action d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">http://Microsoft.ServiceModel.Samples/ICalculator/Multiply</Action>
                     <MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:7c6670d8-4c9c-496e-b6a0-2ceb6db35338</MessageID>
                     <ActivityId CorrelationId="aaaa0000-bb11-2222-33cc-444444dddddd" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">bbbb1111-cc22-3333-44dd-555555eeeeee</ActivityId>
                     <ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
                        <Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
                    </ReplyTo>
                    <To d4p1:mustUnderstand="1" xmlns:d4p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">net.tcp://localhost/servicemodelsamples/service</To>
                  </MessageHeaders>
                  <RemoteAddress>net.tcp://localhost/servicemodelsamples/service</RemoteAddress>
                </ExtendedData>
            </TraceRecord>
          </DataItem>
       </TraceData>
   </ApplicationData>
</E2ETraceEvent>

Tracciamento E2E di ServiceModel

Quando l'origine di traccia è impostata su un valore diverso da Off, e System.ServiceModel, WCF crea attività e trasferimenti per l'elaborazione.

Un'attività è un'unità logica di elaborazione che raggruppa tutte le tracce correlate a tale unità di elaborazione. Ad esempio, è possibile definire un'attività per ogni richiesta. I trasferimenti creano una relazione causale tra le attività all'interno degli endpoint. La propagazione dell'ID attività consente di correlare le attività tra gli endpoint. Questa operazione può essere eseguita impostando propagateActivity=true in configurazione in ogni endpoint. Le attività, i trasferimenti e la propagazione consentono di eseguire la correlazione degli errori. In questo modo, è possibile trovare la causa radice di un errore più rapidamente.

Nel client viene creata un'attività WCF per ogni chiamata al modello a oggetti, ad esempio Open ChannelFactory, Aggiungi, Divide e così via. Ognuna delle chiamate di operazione viene elaborata in un'attività "Azione processo".

Nello screenshot seguente, estratto dall'esempio traccia e registrazione messaggi nel pannello sinistro viene visualizzato l'elenco delle attività create nel processo client, ordinate in base all'ora di creazione. Di seguito è riportato un elenco cronologico di attività:

  • Costruita la fabbrica di canale (ClientBase).

  • Ha aperto la fabbrica di canali.

  • Elaborazione dell'azione Aggiungi.

  • Configurata la sessione sicura (ciò si è verificato nella prima richiesta) ed elaborati tre messaggi di risposta dell'infrastruttura di sicurezza: RST, RSTR, SCT (messaggi di processo 1, 2 e 3).

  • Elaborazione delle richieste Sottrazione, Moltiplicazione e Divisione.

  • È stata chiusa la channel factory, ciò facendo si è chiusa la sessione protetta ed è stata elaborata la risposta al messaggio di sicurezza Annulla.

Vengono visualizzati i messaggi dell'infrastruttura di sicurezza a causa di wsHttpBinding.

Annotazioni

In WCF vengono visualizzati i messaggi di risposta elaborati inizialmente in un'attività separata (messaggio processo) prima di correlarli all'attività di azione processo corrispondente che include il messaggio di richiesta, tramite un trasferimento. Ciò si verifica per i messaggi dell'infrastruttura e le richieste asincrone ed è dovuto al fatto che è necessario esaminare il messaggio, leggere l'intestazione activityId e identificare l'attività azione processo esistente con tale ID per correlarla. Per le richieste sincrone, attendiamo la risposta e quindi sappiamo a quale azione del processo si riferisce la risposta.

L'immagine seguente mostra le attività client WCF elencate in base all'ora di creazione (pannello sinistro) e alle relative attività e tracce annidate (pannello superiore destro):

Screenshot che mostra le attività client WCF elencate in base all'ora di creazione.

Quando si seleziona un'attività nel pannello sinistro, è possibile visualizzare le attività annidate e le tracce nel pannello in alto a destra. Pertanto, questa è una visualizzazione gerarchica ridotta dell'elenco delle attività a sinistra, basata sull'attività madre selezionata. Poiché l'azione di Processo selezionata "Aggiungi" è la prima richiesta effettuata, questa attività include l'attività di Configurazione della sessione sicura (trasferimento a e da) e le tracce per l'elaborazione dell'azione "Aggiungi".

Se si fa doppio clic sull'azione Processo Aggiungi attività nel pannello sinistro, è possibile visualizzare una rappresentazione grafica delle attività WCF client correlate a Aggiungi. La prima attività a sinistra è l'attività radice (0000), ovvero l'attività predefinita. WCF si sposta fuori dall'attività ambientale. Se non è definito, WCF viene trasferito fuori da 0000. In questo caso, la seconda attività, Process Action Add, trasferisce da 0. Verrà quindi visualizzata l'impostazione della sessione protetta.

L'immagine seguente mostra una visualizzazione a grafo delle attività client WCF, in particolare Attività ambientale (qui 0), Azione processo e Configurazione sessione sicura:

Grafico nel Visualizzatore traccia che mostra l'Attività ambientale e l'azione del processo.

Nel pannello in alto a destra è possibile visualizzare tutte le tracce correlate all'attività Process Action Add .On the upper right panel, we can see all traces related to the Process Action Add activity. In particolare, abbiamo inviato il messaggio di richiesta ("Inviato un messaggio su un canale") e abbiamo ricevuto la risposta ("Ricevuto un messaggio su un canale") nella stessa attività. Questo è illustrato nel grafico seguente. Per maggiore chiarezza, l'attività Configura sessione sicura viene compressa nel grafico.

L'immagine seguente mostra un elenco di log per l'attività "Process Action". Inviamo la richiesta e riceviamo la risposta nella stessa attività.

Screenshot del Visualizzatore di tracce che mostra un elenco di tracce per l'attività

In questo caso, le tracce client vengono caricate solo per maggiore chiarezza, ma le tracce del servizio (messaggio di richiesta ricevuto e messaggio di risposta inviato) vengono visualizzate nella stessa attività se vengono caricate anche nello strumento ed propagateActivity è stata impostata su true. Questa è illustrata in una figura successiva.

Nel servizio, il modello di attività corrisponde ai concetti WCF come indicato di seguito.

  1. Si costruisce e si apre un ServiceHost ( questo può creare diverse attività correlate all'host, ad esempio nel caso della sicurezza).

  2. Creiamo un'attività Listen At per ogni listener nel ServiceHost (inclusi i trasferimenti in entrata e in uscita dall'Open ServiceHost).

  3. Quando il listener rileva una richiesta di comunicazione avviata dal client, passa a un'attività di "Ricezione byte", in cui vengono elaborati tutti i byte inviati dal client. In questa attività è possibile visualizzare eventuali errori di connessione che si sono verificati durante l'interazione con il servizio client.

  4. Per ogni set di byte ricevuti che corrisponde a un messaggio, questi byte vengono elaborati in un'attività "Process Message", in cui viene creato l'oggetto Message WCF. In questa attività vengono visualizzati errori correlati a una busta non valida o a un messaggio in formato non valido.

  5. Una volta creato il messaggio, viene trasferito a un'attività Process Action. Se propagateActivity è impostato true su sia sul client che sul servizio, questa attività ha lo stesso ID di quello definito nel client e descritto in precedenza. Da questa fase si inizia a trarre vantaggio dalla correlazione diretta tra endpoint, perché tutte le tracce generate in WCF correlate alla richiesta si trovano nella stessa attività, inclusa l'elaborazione dei messaggi di risposta.

  6. Per un'azione out-of-process, viene creata un'attività "Esegui codice utente" per isolare le tracce generate nel codice utente da quelle generate in WCF. Nell'esempio precedente, la traccia "Service invia una risposta" viene generata nell'attività "Esegui codice utente" non nell'attività propagata dal client, se applicabile.

Nella figura seguente, la prima attività a sinistra è l'attività radice (0000), ovvero l'attività predefinita. Le tre attività successive sono l'apertura di ServiceHost. L'attività nella colonna 5 è il listener e le attività rimanenti (da 6 a 8) descrivono l'elaborazione WCF di un messaggio, dall'elaborazione byte all'attivazione del codice utente.

L'immagine seguente mostra una visualizzazione a grafo delle attività del servizio WCF:

Screenshot del Visualizzatore di traccia che mostra un elenco di attività del servizio WCF

Lo screenshot seguente mostra le attività sia per il client che per il servizio ed evidenzia l'attività Process Action Add tra processi (arancione). Le frecce riguardano i messaggi di richiesta e risposta inviati e ricevuti dal client e dal servizio. Le tracce di azione di processo sono separate nei grafici, ma visualizzate come parte della stessa attività nel pannello in alto a destra. In questo pannello è possibile visualizzare le tracce client per i messaggi inviati seguiti dalle tracce del servizio per i messaggi ricevuti ed elaborati.

Le immagini seguenti illustrano una visualizzazione a grafo delle attività client e di servizio WCF

Grafico di Trace Viewer che mostra le attività sia del client WCF che del servizio.

Nello scenario di errore seguente, le tracce di errore e avviso nel servizio e nel client sono correlate. Viene innanzitutto generata un'eccezione nel codice utente del servizio (l'attività verde più a destra che include una traccia di avviso per l'eccezione "Il servizio non può elaborare questa richiesta nel codice utente"). Quando la risposta viene inviata al client, viene nuovamente generata una traccia di avviso per indicare il messaggio di errore (attività rosa sinistra). Il client chiude quindi il client WCF (attività gialla sul lato inferiore sinistro), che interrompe la connessione al servizio. Il servizio genera un errore (attività color rosa più lunga a destra).

Utilizzo del visualizzatore di traccia

Correlazione degli errori tra il servizio e il client

L'esempio usato per generare queste tracce è una serie di richieste sincrone che usano wsHttpBinding. Esistono deviazioni da questo grafico per scenari senza sicurezza o con richieste asincrone, in cui l'attività Azione processo include le operazioni di inizio e fine che costituiscono la chiamata asincrona e mostra i trasferimenti a un'attività di callback. Per ulteriori informazioni sugli scenari aggiuntivi, vedere Scenari di tracciamento end-To-End.

Risoluzione dei problemi relativi all'uso del Visualizzatore di traccia del servizio

Quando si caricano i file di traccia nello strumento Visualizzatore traccia dei servizi, è possibile selezionare qualsiasi attività rossa o gialla nel pannello sinistro per tenere traccia della causa di un problema nell'applicazione. L'attività 000 in genere presenta eccezioni non gestite che si manifestano all'utente.

L'immagine seguente mostra come selezionare un'attività rossa o gialla per individuare la radice di un problema. Screenshot delle attività rosse o gialle per individuare la radice di un problema.

Nel pannello in alto a destra è possibile esaminare le tracce per l'attività selezionata a sinistra. È quindi possibile esaminare tracce rosse o gialle in tale pannello e vedere come sono correlate. Nel grafico precedente, vengono visualizzate tracce di avviso sia per il client che per il servizio nella stessa azione di processo.

Se queste tracce non forniscono la causa radice dell'errore, è possibile utilizzare il grafico facendo doppio clic sull'attività selezionata nel pannello sinistro (qui Azione processo). Viene quindi visualizzato il grafico con le attività correlate. È quindi possibile espandere le attività correlate facendo clic sui segni "+" per trovare la prima traccia generata in rosso o giallo in un'attività correlata. Continuare ad espandere le attività che si sono verificate poco prima della traccia rossa o gialla di interesse, seguendo i trasferimenti alle attività correlate o ai flussi di messaggi tra gli endpoint, fino a quando non si tiene traccia della causa radice del problema.

Utilizzo del visualizzatore di traccia

Espansione delle attività per tenere traccia della causa radice di un problema

Se ServiceModel ActivityTracing è disattivato ma la traccia ServiceModel è attivata, è possibile visualizzare le tracce di ServiceModel generate nell'attività 0000. Tuttavia, questo richiede maggiore impegno per comprendere la correlazione di queste tracce.

Se la registrazione messaggi è abilitata, è possibile usare la scheda Messaggio per visualizzare il messaggio interessato dall'errore. Facendo doppio clic su un messaggio in rosso o giallo, è possibile visualizzare la visualizzazione grafico delle attività correlate. Queste attività sono quelle più strettamente correlate alla richiesta in cui si è verificato un errore.

Screenshot del Visualizzatore di traccia con la registrazione dei messaggi abilitata.

Per avviare la risoluzione dei problemi, è anche possibile selezionare una traccia dei messaggi rossa o gialla e fare doppio clic su di essa per tenere traccia della causa radice.

Vedere anche