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.
In questo argomento viene descritto come abilitare la tracciatura, configurare le origini di traccia per generare tracce e impostare i livelli di tracciatura, impostare la tracciatura delle attività e la loro propagazione per supportare la correlazione delle tracciature end-to-end e impostare listener di tracciatura per accedere alle tracce.
Per indicazioni sulle impostazioni di traccia nell'ambiente di produzione o di debug, vedere Impostazioni consigliate per la traccia e la registrazione dei messaggi.
Importante
In Windows 8 è necessario eseguire l'applicazione con privilegi elevati (Esegui come amministratore) affinché l'applicazione generi i log di traccia.
Abilitazione del tracciamento
Windows Communication Foundation (WCF) restituisce i dati seguenti per la traccia diagnostica:
Tracce per attività cardine del processo in tutti i componenti delle applicazioni, ad esempio chiamate di operazione, eccezioni di codice, avvisi e altri eventi di elaborazione significativi.
Eventi di errore di Windows quando la funzionalità di traccia non funziona correttamente. Vedere Registrazione eventi.
La traccia WCF si basa su System.Diagnostics. Per usare la traccia, è necessario definire le origini di traccia nel file di configurazione o nel codice. WCF definisce un'origine di traccia per ogni assembly WCF. L'origine System.ServiceModel di traccia è la fonte di traccia WCF più generale e registra i passaggi fondamentali di elaborazione nello stack di comunicazione WCF, dall'entrata/uscita del trasporto all'entrata/uscita del codice utente. La fonte System.ServiceModel.MessageLogging di traccia registra tutti i messaggi che fluiscono attraverso il sistema.
Il tracciamento non è abilitato per impostazione predefinita. Per attivare la traccia, è necessario creare un listener di traccia e impostare un livello di traccia diverso da "Off" per l'origine di traccia selezionata nella configurazione; in caso contrario, WCF non genera tracce. Se non si specifica un ascoltatore, il tracciamento viene disabilitato automaticamente. Se viene definito un listener, ma non viene specificato alcun livello, il livello viene impostato su "Off" per impostazione predefinita, il che significa che non viene generata alcuna traccia.
Se utilizzate punti di estendibilità WCF, come per invocare operazioni personalizzate, dovreste emettere le vostre tracciature. Ciò avviene perché se si implementa un punto di estendibilità, WCF non può più generare le tracce standard nel percorso predefinito. Se non si implementa il supporto della traccia manuale creando tracce, è possibile che le tracce previste non vengano visualizzate.
È possibile configurare la traccia modificando il file di configurazione dell'applicazione, Web.config per le applicazioni ospitate sul Web o Appname.exe.config per le applicazioni self-hosted. Di seguito è riportato un esempio di tale modifica. Per ulteriori informazioni su queste impostazioni, vedere la sezione "Configurazione dei listener di traccia per il consumo delle tracce".
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Annotazioni
Per modificare il file di configurazione di un progetto di servizio WCF in Visual Studio, fare clic con il pulsante destro del mouse sul file di configurazione dell'applicazione, Web.config per le applicazioni ospitate sul Web o Appname.exe.config per l'applicazione self-hosted in Esplora soluzioni. Scegliere quindi la voce di menu di scelta rapida Modifica configurazione WCF . Verrà avviato lo strumento editor di configurazione (SvcConfigEditor.exe), che consente di modificare le impostazioni di configurazione per i servizi WCF usando un'interfaccia utente grafica.
Configurazione delle origini di traccia per l'emissione di tracce
WCF definisce una sorgente di traccia per ogni assembly. Le tracce generate all'interno di un assembly vengono accedute dai listener definiti per quella sorgente. Sono definite le origini di traccia seguenti:
System.ServiceModel: registra tutte le fasi dell'elaborazione WCF, ogni volta che la configurazione viene letta, viene elaborato un messaggio nel trasporto, nell'elaborazione della sicurezza, viene inviato un messaggio nel codice utente e così via.
System.ServiceModel.MessageLogging: registra tutti i messaggi che passano attraverso il sistema.
System.IdentityModel.
System.ServiceModel.Activation.
System.IO.Log: logging per l'interfaccia del .NET Framework al Common Log File System (CLFS).
System.Runtime.Serialization: registra quando gli oggetti vengono letti o scritti.
CardSpace.
È possibile configurare ogni origine di traccia in modo da usare lo stesso listener (condiviso), come indicato nell'esempio di configurazione seguente.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="CardSpace">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IO.Log">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.Runtime.Serialization">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IdentityModel">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\log\Traces.svclog" />
</sharedListeners>
</system.diagnostics>
</configuration>
È anche possibile aggiungere origini di traccia definite dall'utente, come illustrato nell'esempio seguente, per generare tracce di codice utente.
<system.diagnostics>
<sources>
<source name="UserTraceSource" switchValue="Warning, ActivityTracing" >
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\UserTraces.svclog" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>
Per altre informazioni sulla creazione di origini di traccia definite dall'utente, vedere Estensione della traccia.
Configurazione dei listener di traccia per consumare le tracce
In fase di esecuzione, WCF invia i dati di traccia ai listener, che elaborano i dati. WCF fornisce diversi listener predefiniti per System.Diagnostics, che differiscono nel formato usato per l'output. È anche possibile aggiungere tipi di listener personalizzati.
È possibile usare add per specificare il nome e il tipo del listener di traccia da usare. Nella configurazione di esempio, abbiamo denominato il listener traceListener e aggiunto il listener di traccia standard di .NET Framework (System.Diagnostics.XmlWriterTraceListener) come tipo che vogliamo usare. È possibile aggiungere un numero qualsiasi di listener di traccia per ogni origine. Se il listener di traccia genera la traccia in un file, è necessario specificare il percorso e il nome del file di output nel file di configurazione. Questa operazione viene eseguita impostando initializeData sul nome del file per tale listener. Se non si specifica un nome file, viene generato un nome di file casuale in base al tipo di listener usato. Se XmlWriterTraceListener viene usato, viene generato un nome di file senza estensione. Se si implementa un listener personalizzato, è anche possibile usare questo attributo per ricevere dati di inizializzazione diversi da un nome file. Ad esempio, è possibile specificare un identificatore di database per questo attributo.
È possibile configurare un listener di traccia personalizzato per inviare tracce in transito, ad esempio a un database remoto. In qualità di responsabile del deployment delle applicazioni, è importante applicare un controllo di accesso adeguato ai log di tracciamento nel computer remoto.
È anche possibile configurare un listener di traccia a livello di codice. Per ulteriori informazioni, vedere Procedura: Creare e Inizializzare Listener di Traccia e Creazione di un Oggetto TraceListener Personalizzato.
Attenzione
Poiché System.Diagnostics.XmlWriterTraceListener non è thread-safe, l'origine di traccia può bloccare le risorse esclusivamente quando emette le tracce. Quando molti thread generano tracce verso un'origine di traccia configurata per utilizzare questo listener, può verificarsi una contesa delle risorse, causando un significativo problema di prestazioni. Per risolvere questo problema, dovresti implementare un listener personalizzato che sia thread-safe.
Livello di traccia
Il livello di traccia è controllato dall'impostazione switchValue dell'origine di traccia. I livelli di traccia disponibili sono descritti nella tabella seguente.
| Livello di traccia | Natura degli eventi rilevati | Contenuto degli eventi rilevati | Eventi rilevati | Destinazione utente |
|---|---|---|---|---|
| Disattivato | Non disponibile | Non disponibile | Nessuna traccia viene emessa. | Non disponibile |
| Critico | Eventi "Negativi": eventi che indicano un'elaborazione imprevista o una condizione di errore. | Vengono registrate eccezioni non gestite, incluse le seguenti: - OutOfMemoryException - ThreadAbortException (CLR richiama qualsiasi ThreadAbortExceptionHandler) - StackOverflowException (non può essere intercettato) - ConfigurationErrorsException - SEHException - Errori di avvio dell'applicazione - Eventi 'failfast' - Blocchi di sistema - Messaggi avvelenati: tracce di messaggi che causano il fallimento dell'applicazione. |
Amministratori Sviluppatori di applicazioni |
|
| Errore | Eventi "Negativi": eventi che indicano un'elaborazione imprevista o una condizione di errore. | È stata eseguita un'elaborazione imprevista. L'applicazione non è stata in grado di eseguire un'attività come previsto. Tuttavia, l'applicazione è ancora in esecuzione. | Vengono registrate tutte le eccezioni. | Amministratori Sviluppatori di applicazioni |
| Avvertimento | Eventi "Negativi": eventi che indicano un'elaborazione imprevista o una condizione di errore. | Si è verificato un possibile problema o può verificarsi, ma l'applicazione funziona ancora correttamente. Tuttavia, potrebbe non continuare a funzionare correttamente. | - L'applicazione riceve più richieste rispetto alle impostazioni di limitazione consentite. - La coda ricevente è vicina alla capacità massima prevista. - Il timeout è stato superato. - Le credenziali vengono rifiutate. |
Amministratori Sviluppatori di applicazioni |
| Informazione | Eventi "Positivi": eventi che contrassegnano le attività cardine riuscite | Attività cardine importanti e riuscite dell'esecuzione dell'applicazione, indipendentemente dal fatto che l'applicazione funzioni correttamente o meno. | In generale, vengono generati messaggi utili per il monitoraggio e la diagnosi dello stato del sistema, la misurazione delle prestazioni o della profilatura. È possibile usare tali informazioni per la pianificazione della capacità e la gestione delle prestazioni: - Vengono creati canali. - Gli ascoltatori degli endpoint vengono creati. - Il messaggio entra/esce dal sistema di trasporto. - Il token di sicurezza viene recuperato. - Lettura dell'impostazione di configurazione. |
Amministratori Sviluppatori di applicazioni Sviluppatori di prodotti. |
| Verboso | Eventi "Positivi": eventi che contrassegnano le attività cardine riuscite. | Vengono generati eventi di basso livello sia per il codice utente che per la manutenzione. | In generale, è possibile usare questo livello per il debug o l'ottimizzazione dell'applicazione. - Intestazione del messaggio compresa. |
Amministratori Sviluppatori di applicazioni Sviluppatori di prodotti. |
| ActivityTracing | Flusso di eventi tra le attività di elaborazione e i componenti. | Questo livello consente agli amministratori e agli sviluppatori di correlare le applicazioni nello stesso dominio applicazione: - Tracce per i limiti dell'attività, ad esempio avvio/arresto. - Tracce per i trasferimenti. |
Tutti | |
| Tutti | L'applicazione potrebbe funzionare correttamente. Tutti gli eventi vengono emessi. | Tutti gli eventi precedenti. | Tutti |
I livelli da Verbose a Critical vengono impilati l'uno sopra l'altro, ovvero ogni livello di traccia include tutti i livelli al di sopra di esso, ad eccezione del livello Off. Ad esempio, un listener in ascolto a livello di avviso riceve tracce Critical, Error e Warning. Il livello All include gli eventi da Verbose a Critical e gli eventi di tracciamento attività.
Attenzione
I livelli Information, Verbose e ActivityTracing generano molte tracce, che possono influire negativamente sulla velocità effettiva dei messaggi se sono state usate tutte le risorse disponibili nel computer.
Configurazione del tracciamento e della propagazione delle attività per la correlazione
Il activityTracing valore specificato per l'attributo switchValue viene usato per abilitare la traccia delle attività, che genera tracce per i limiti e i trasferimenti di attività all'interno degli endpoint.
Annotazioni
Nel caso in cui si utilizzino determinate funzionalità di estendibilità in WCF, potrebbe verificarsi un NullReferenceException quando il tracciamento delle attività è abilitato. Per risolvere il problema, controllare il file di configurazione dell'applicazione e assicurarsi che l'attributo per l'origine switchValue di traccia non sia impostato su activityTracing.
L'attributo propagateActivity indica se l'attività deve essere propagata ad altri endpoint che partecipano allo scambio di messaggi. Impostando questo valore su true, è possibile acquisire i file di traccia generati da due endpoint e osservare come un set di tracce in un endpoint è stato propagato a un set di tracce in un altro endpoint.
Per altre informazioni sulla traccia e la propagazione delle attività, vedere Propagazione.
Entrambi i valori booleani, propagateActivity e ActivityTracing, si applicano al System.ServiceModel TraceSource. Il ActivityTracing valore si applica anche a qualsiasi fonte di traccia, inclusi WCF o quelli definiti dall'utente.
Non è possibile usare l'attributo propagateActivity con origini di traccia definite dall'utente. Per la propagazione dell'ID attività del codice utente, assicurarsi di non impostare ServiceModel ActivityTracing, mantenendo comunque l'attributo ServiceModel propagateActivity impostato su true.