Nello sviluppo di applicazioni Web è molto importante poter analizzare le richieste
HTTP, per capire lo stato della nostra applicazione durante l'esecuzione e capire cosa stia esattamente accadendo magari inserendo anche delle istruzioni che ci permettano di effettuare una specie di debug/log a runtime.
Se avessimo accesso ai file di Log del Web Server questo sarebbe decisamente più semplice, ma spesso quando si sta utilizzando un servizio di hosting, non c'è questa possibilità perchè difficilmente il provider concede l'accesso a questi file. Inoltre le informazioni contenute all'interno dei Log Files sono limitate, possiamo infatti vedere la pagina richiesta, lo stato restituito dal web server, la data e l'ora e poche altre.
ASP.NET in questo caso ci viene in aiuto offrendoci il
Tracing che ci consente di analizzare le richieste Web effettuate ad ASP.NET ma non solo ci permette anche di analizzarle in modo decisamente approfondito verificando come viene effettuata la richiesta, con quali cookies, quale ID di sessione, quali Headers, ecc.
Il tracing infatti ci mette in condizione di controllare le richieste Web e di controllarne lo stato restituito dal Web Server al client, ma non solo, è possibile infatti utilizzare delle istruzioni apposite (come
Trace.Warn o
Trace.Write) che ci danno la possibilità di appuntarci delle note durante l'esecuzione e la produzione/Rendering della pagina e di vederle succesivamente tutte assieme riepilogate per capire e vedere eventuali errori durante l'esecuzione della richiesta.
Il tracing può essere attivato a livello di pagina inserendo la direttiva
Trace in questo modo:
<%@ Page trace="true" %>
Questa soluzione può essere utile per esempio in fase di debug dell'applicazione (non produzione) perchè le informazioni estese relativa alla richiesta vengono appese/accodate in fondo alla pagina. All'utente finale queste informazioni non interessano; inoltre potrebbero essere potenzialmente pericolose se usate per fare dei danni.
Un altro modo per attivare il Tracing è utilizzare il
web.config. Di solito se non viene specificato niente nel web.config il servizio di Tracing è disabilitato. Per abilitarlo è sufficiente inserire il tag
<trace> in questo modo:
<trace enabled="true" requestLimit="40" pageOutput="false" traceMode="SortByTime" localOnly="false"/>
Analizziamo quindi il web.config per capire meglio gli attributo dell'attributo Trace:
• Enabled (abilita o disabilita il Tracing)
• requestLimit (specifica il numero massimo di richieste che vengono archiviate sul server web. Il default è di 10 richieste)
• pageOutput (indica se il risultato deve essere visualizzato alla fine delle pagina)
• traceMode (può avere due valori
SortByTime o
SortByCategory. Nel primo caso le richieste saranno ordinate in base alla data e ora di elaborazione, nel secondo caso verranno ordinate in base alla categoria di cui fanno parte. La Categoria può essere specificata di volta in volta nel codice Server Side modificando il secondo parametro dei metodi Warn e Write)
Se si attiva il Tracing mettendo a true l'attributo
enabled è possibile consultare le richieste archiviate sul server man mano arrivano aprendo la pagina speciale
trace.axd, per esempio www.sitoweb.com/trace.axd
Come si può vedere dalla screenshot vengono presentate le seguenti informazioni:
1. La data e l'ora della richiesta
2. il file/pagina che è stato richiesto
3. lo stato della richiesta
4. il tipo di richiesta(di solito
GET o
POST)
Quindi già dall'elenco delle richieste è possibile verificare se qualcuno sta cercando di accedere a pagine che non esistono o ad aree magari protette come quelle per l'amministrazione.
Diventa ancora più interessante visualizzare i dettagli di ogni singola richiesta:
Nell'intestazione sono presentati i seguenti dati:
• Il valore del
Session ID• I dati della richiesta (tipo, data e ora, stato)
• Il tipo di enconding sia della richiesta che della risposta
Successivamente c'è la cronistoria degli eventi scatenati dalla pagina (come il
Begin Init ed
End Init,
Begin PreRender ed
End PreRender, e così via).
A fianco dei nomi degli eventi viene anche visualizzato il tempo trascorso dalla prima richiesta e il tempo trascorso dall'ultima richiesta.
Più in basso viene visualizzata la
Control Tree ossia una gerarchia dei controlli contenuti nella pagina:
Le informazioni che vengono visualizzate sono:
• Il nome del controllo
• Il tipo
• La dimensione in bytes
• Quanti bytes occupa nel viewstateHo messo in rilievo il controllo
DataGrid per farvi notare quanto occupa nel
ViewState.
Infine ci sono le informazioni relative ai
Cookies, agli
Headers e alle variabili del Server (Server Variables).
E' inoltre possibile scrivere nel Log per verificare la corretta esecuzione e flusso delle istruzioni. Per scrivere delle informazioni nel Log è si può utilizzare la classe
TraceContext. Più semplicemenete all'interno della pagina è possibile richiamarla da
Page.Trace.
I metodi esposti dalla classe
TraceContext sono i seguenti:
- Write (scrive un'informazione in modalità normale - colore nero)
- Warn (come la Write, l'unica differenza che il testo compare in rosso)
Questi due metodi hanno tre
overloads:
1. Messaggio
2. Categoria e Messaggio
3. Categoria, Messaggio e eccezione
Il metodo
Write è da usare per informazioni di debug esempio verificare l’apertura del database, segnalare il termine di una certa operazione, ecc.
Warn invece è più utile per segnalare degli errori. E'infatti consigliato utilizzarla nei blocchi
try..catch magari usando il terzo overload che consente di passare anche il tipo di eccezione sollevata.
ConclusioniIl servizio di tracing di ASP.NET è uno strumento che il .NET Framework ci fornisce out-of-the-box cioè subito pronto all'uso. E' uno strumento molto importante ed utile che ogni sviluppatore Web dovrebbe conoscere a fondo in modo da utilizzarlo al meglio e aumentare la sua produttività evitando di perdere tempo su problematiche spesso banali che a volte richiedono un'estensione nei tempi di rilascio, cosa poco tollerata dall'eventuale committente del lavoro.