Introduzione
Un servizio non è composto solo da un applicativo in background che esegue delle operazioni, ma anche da una serie di funzioni che ne permettono la gestione. Il tracing ed il logging sono due funzioni fondamentali per l'analisi e la manutenzione dei servizi. Infatti, tramite questi due meccanismi è facilmente rintracciabile qualunque operazione effettuata dal servizio e qualunque messaggio sia transitato. In quest'articolo viene illustrato per primo il meccanismo di tracing, mentre il logging verrà discusso in un articolo futuro.
Tracing
Il tracing è quella parte della strumentazione di un servizio che permette di tracciare ogni singola operazione svolta dall'applicazione. In altre parole il tracing è il meccanismo tramite il quale si può loggare tutto quello che succede all'interno del servizio.
Il tracing di Windows Communication Foundation si appoggia al meccanismo di diagnostica già presente nel .NET Framework e quindi è facilmente configurabile ed utilizzabile senza dover imparare (quasi) nulla di nuovo. Il cuore del sistema di tracing del .NET è contenuto nelle classi del namespace System.Diagnostics.
Alla base del sistema di tracing ci sono le Sources, cioè degli oggetti che sono in ascolto e che ricevono le informazioni di tracing dal codice. Definire una Source ed inviarle i dati è un'operazione che viene fatta da codice. Una volta che vengono inviate le informazioni verso le Source, queste vengono a loro volta reindirizzate ad una lista di oggetti che sono in ascolto e persistono i dati ricevuti. Le classi in ascolto vengono definite Listeners e derivano tutte dalla classe base TraceListener. Esistono diverse classi già pronte nel framework che scrivono le informazioni ricevute in diversi formati; ad esempio, c'è la classe XmlWriterTraceListener che scrive le informazioni su un file in formato XML, oppure TextWriterTraceListener che scrive sempre su un file, ma nello stesso formato in cui queste vengono ricevute, o ancora EventLogTraceListener che reindirizza invece sul registro di sistema. Oltre a queste tre che sono quelle più utilizzate, ne esistono anche altre meno conosciute ma comunque utili: ConsoleTraceListener e DelimitedListTraceListener.
Tracing e Windows Communication Foundation
Uno dei punti di forza di questa tecnica sta nella facile configurazione delle varie Source e Listener per ricevere le informazioni di tracing emesse dal codice; basta inserire opportunamente il nodo system.diagnostics nel file di configurazione.
<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> <trace autoflush="true" /> </system.diagnostics> <configuration>
Ciò che si evince da questo snippet, è che il sistema deve recuperare le informazioni di tracing emesse per la Source System.ServiceModel, definita già in WCF, (sezione source, attributo name) e che abbiano almeno un livello di Information (attributo switchValue) e deve inviarle al Listener di nome traceListener (sezione listeners/add) il quale le scrive nel file "c:\log\Traces.svclog" (attributo inizializeData) in formato xml (attributo Type). Infine, la scrittura dei dati sul file avviene automaticamente senza intervenire da codice (sezione Trace attributo autoFlush).
Attenzione: Questo articolo contiene un allegato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.