ActivityTracing
Una delle cose più utili quando si impostano le informazioni di tracing è la possibilità di suddividere chiaramente le varie attività che vengono svolte per elaborare una richiesta. Ad esempio, l'assembly System.ServiceModel suddivide le varie attività che portano dall'avvio del servizio alla ricezione ed alla conseguente risposta di un messaggio. In questo lasso di tempo si verifica l'avvio dell'host, l'apertura del canale, la ricezione del messaggio, la sua elaborazione ed infine l'invio del messaggio di risposta. Seguirà poi la chiusura del canale e dell'host. Poter identificare e separare i messaggi che arrivano durante le varie fasi, permette una più facile ricerca dei dati che si stanno cercando già a primo impatto. La parte di infrastruttura e la tecnica che facilitano questo compito sono denominate ActivityTracing.
Ma come funziona l'ActivityTracing? L'oggetto Trace in .NET contiene una proprieta CorrelationManager che è responsabile del mantenimento di tutte le informazioni di tracing emesse sotto una unica attività. Queste informazioni vengono correlate tra loro grazie alla proprietà ActivityId (di tipo Guid) di CorrelationManager. Impostanre ActivityId su un nuovo valore, comporta l'inizio di una nuova attività. In questo modo si possono facilmente creare nuove sotto-attività. Per semplificare ulteriormente l'utilizzo dell'ActivityTracing, si possono usare adeguatamente i metodi TraceTransfer e TraceEvent per ottenere un risultato ancora più chiaro.
public string PublicMethod(string input) { if (Trace.CorrelationManager.ActivityId == Guid.Empty) { Guid newGuid = Guid.NewGuid(); Trace.CorrelationManager.ActivityId = newGuid; } ts.TraceEvent(TraceEventType.Information, 0, "Ricevuto messaggio "); string result = input.ToUpper(); privateMethod(); ts.TraceEvent(TraceEventType.Information, 0, "Inviato messaggio "); return result; } private string privateMethod() { // 1 Guid oldGuid = Trace.CorrelationManager.ActivityId; Guid newGuid = Guid.NewGuid(); // 2 ts.TraceTransfer(667, "myMethod Transferring.", newGuid); // 3 ts.TraceEvent(TraceEventType.Suspend, 667, "Suspend: caller of privateMethod"); // 4 Trace.CorrelationManager.ActivityId = newGuid; // 5 ts.TraceEvent(TraceEventType.Start, 667, "Boundary: privateMethod"); // 6 ts.TraceEvent(TraceEventType.Information, 667, "Inizio privateMethod"); // Codice // 7 ts.TraceEvent(TraceEventType.Information, 667, "Fine privateMethod"); // 8 ts.TraceTransfer(667, "Transferring Back.", oldGuid); // 9 ts.TraceEvent(TraceEventType.Stop, 667, "Boundary: privateMethod "); // 10 Trace.CorrelationManager.ActivityId = oldGuid; // 11 ts.TraceEvent(TraceEventType.Resume, 667, "Resume:callerofprivateMethod"); // 12 return ""; }
In questo snippet sono dettate le linee guida ottimali da seguire quando si vuole utilizzare l'ActivityTracing. Innanzitutto, nel metodo PublicMethod vengono inviate solo informazioni all'inizio ed alla fine del metodo. Ovviamente si possono inserire informazioni anche nel mezzo del codice, ma sempre e solo informazioni relative a dati o eventi. La parte interessante viene nel metodo privateMethod; è infatti all'interno di questo metodo che si fa pieno uso delle potenzialità di questa tecnica. privateMethod è considerato nel codice a tutti gli effetti una nuova attività quindi, per prima cosa, salva il guid dell'attività precedente (1). Successivamente invia un'informazione di tracing per dire che il controllo è stato trasferito ad una nuova attività (2) e sospende l'attività corrente (3) (in realtà quest'ultima opzione non è fondamentale, ma è comunque utile per aggiungere chiarezza). Successivamente, imposta il nuovo guid (4) come ActivityId corrente così che tutte le informazioni di tracing successive vengono inviate a questa attività. Viene poi inviato un messaggio di inizio attività (5), di informazione (6), eseguito del codice, inviato un nuovo messaggio di informazione (7) ed un messaggio di trasferimento all'attività precedente (8). Infine si invia un messaggio di fine attività (9), viene ripristinato il guid dell'attività precedente (10) ed inviato un messaggio di attività ripresa (11).
La parte ancora più interessante viene quando si decide di propagare l'ActivityId anche sul client. Per fare questo si deve impostare l'attributo propagateActivity a true come visto nella prima configurazione. In questo modo, se il client ha un file di tracing nello stesso formato di quello server, si posso anche correlare le attività tra client e server ed avere un quadro completo del funzionamento del sistema.
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Pagina 1
- Pagina 3
- Pagina 4
- Pagina 5
- Le novità del .NET Framework 3.5 SP1 in Windows Presentation Foundation
- Introduzione a .NET Micro Framework
- Gestire transazioni miste con NTFS in Windows Server 2008
- Windows Presentation Foundation 3.5: 3D interattivo e le altre novità del framework
- Le novità di Communication e Workflow Foundation e la loro cooperazione nel .NET Framework 3.5
- .NET Framework 3.5 e Visual Studio 2008: cosa c'è di nuovo
- Gestione delle eccezioni in Windows Communication Foundation
- Sviluppare workflow sequenziali con WF
- WPF: dal DataBinding ai Template - Terza parte
- WPF: dal DataBinding ai Template - Seconda parte
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!