Home Page Home Page Articoli Utilizzare il Tracing in ASP.NET

Utilizzare il Tracing in ASP.NET

Scopriamo in questo articolo il servizio di analisi di ASP.NET che permette di controllare e analizzare le richieste web, consentendo di scrivere nel log del servizio di analisi in modo da effettuare a runtime una sorta di debug dell'applicazione Web.
Autore: Marco Caruso Livello:
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 viewstate




Ho 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.

Conclusioni
Il 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.
Voto medio articolo: 5.0 Numero Voti: 2
Marco Caruso

Marco Caruso

Consulente Informatico di Roma, inizia la sua carriera nel 2000 utilizzando la tecnlogia Lotus Notes e il server Domino. Alla fine del 2001 passa alla piattaforma Microsoft.NET dove si appassiona sempre più a questa nuova tecnlogia. Importanti progetti a livello Enterprise per grandi società lo portano a cono... Profilo completo

Articoli collegati

Utilizzare controlli lato server in un Datagrid
Il DataGrid è un controllo molto avanzato spesso usato in ASP.NET. La maggior parte degli sviluppatori utilizza le funzioni basilari. E' possibile però estenderlo utilizzando controlli server aggiuntivi all'interno delle celle. Vediamo un esempio con una Combo Box.
Autore: Luca Graziani | Difficoltà: | Commenti: 6 | Voto:
Spedire messaggi SMS con .NET
Spiegheremo in questo articolo alcune tecniche per inviare messaggi SMS tramite .NET: invio tramite Web Service, invio diretto tramite cellulare oppure invio tramite un SMS Gateway. Presente anche un esempio pratico di invio con ASP.NET e Web Service.
Autore: David De Giacomi | Difficoltà: | Commenti: 9
Utilizzare il Web Service dei SQL Reporting Services da una pagina ASP.NET
Vedremo in questo articolo un altro modo di utilizzo dei Reporting Services. Mostreremo infatti come consumare il Web Service offerto dai RS per esportare i Reports in vari formati (XML, Excel, PDF, HTML, CSV) e visualizzarli in una pagina ASP.NET.
Autore: Marco Caruso | Difficoltà: | Commenti: 1 | Voto:
Visualizzare gerarchicamente i dati con una speciale DataGrid
La rappresentazione grafica di dati gerarchicamente connessi tra loro può essere realizzata anche con l'ausilio di un free control, creato da Denis Bauer, ottenendo un risultato veramente ottimo sia dal punto di vista grafico sia da quello funzionale.
Autore: Andrea Bersi | Difficoltà: | Commenti: 1 | Voto:
Mobile Web Forms e compatibilità tra Device
Ecco un articolo che illustra la creazione di una pagina mobile, tenendo conto delle compatibilità tra vari Device mobili.
Autore: Giovanni Ferron | Difficoltà:
DataSet, CreateChildView, e DataRelation: usare DataGrid per visualizzare dati da 2 tabelle
Un semplice e chiaro esempio per sfruttare al meglio il controllo DataGrid, per la visualizzazione di dati provenienti da 2 tabelle diverse, ma collegate fra loro. Viene spiegato come utilizzare il DataSet per creare delle relazioni tra le tabelle in esso contenute.
Autore: Andrea Bersi | Difficoltà: | Commenti: 1 | Voto:
Caching di pagine ASP.NET
Quando si ha a che fare con l'ingegnerizzazione di un programma la gestione del cache è una cosa importante. La "cache" e' un'area molto veloce (di solito la RAM) dove vengono copiati i dati che necessitano di essere disponibili nel piu breve tempo possibile. Vediamo com'è possibile gestire la Cache in ASP.NET
Autore: Matteo Raumer | Difficoltà:
Paginare un Datalist utilizzando il metodo ReadXml della classe Dataset
Il controllo DataGrid è uno strumento molto completo, ma che a volte può risultare troppo complesso in base alle esigenze della nostra applicazione. In questo articolo verrà spiegato come utilizzare al massimo il controllo DataList, anch'esso ottimo visualizzatore di dati, utilizzando però un'origine dati in formato XML, implementandone la paginazione.
Autore: Matteo Raumer | Difficoltà:
Come paginare un DataList
In questo articolo viene spiegato come paginare un DataList, grazie all'aiuto di stored procedure e al supporto per il paging offerto dal controllo stesso. Per ottenere una paginazione veloce, leggera, e personalizzabile al massimo.
Autore: Loris Badii | Difficoltà: | Commenti: 2 | Voto:
Ridimensionare al volo le immagini uploadate sul server, per creare le ThumbnailImages.
Molto spesso ci capita di voler visualizzare un'anteprima di un'immagine che magari ha grosse dimensioni. In questo articolo verrà spiegato come creare le immagini ridimensionate senza perdita di qualità.
Autore: Valerio Fornito | Difficoltà: | Commenti: 6
Renderizzare automaticamente gli URL come links in formato HTML
Molto spesso ci capita di dover visualizzare nelle pagina web degli URL, letti magari dal DB, ma che non ci vengono visualizzati subito come link cliccabili dall'utente. In questo articolo verrà spiegato come automatizzare questo processo.
Autore: Valerio Fornito | Difficoltà: | Voto:
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5