|
Scott Mitchell, 4GuysFromRolla.com Settembre 2004 Riassunto: In questo articolo, Scott Mitchell e Atif Aziz mostrano come utilizzare i moduli e i gestori HTTP per aggiungere la registrazione degli errori alle proprie applicazioni ASP.NET (22 pagine stampate). Questo articolo contiene collegamenti a siti e pagine Web in inglese. Scaricare il file di esempio MSDNElmah.msi. SommarioIntroduzione IntroduzioneAvete mai utilizzato un'applicazione ASP.NET e progettato delle caratteristiche e funzionalità desiderando di poterle poi riutilizzare facilmente in un'altra applicazione ASP.NET? ASP.NET offre diversi strumenti per la componentizzazione di diversi tipi di funzionalità. Gli strumenti più comuni per il riutilizzo in ASP.NET sono due:
Esistono due strumenti di riutilizzo di ASP.NET non molto utilizzati che sono i moduli e i gestori HTTP. Se non sapete cosa siano i gestori e i moduli HTTP, non preoccupatevi. Ce ne occuperemo più avanti nell'articolo. Per il momento, basta sapere che i moduli HTTP sono classi che è possibile configurare in modo da essere eseguite in risposta ad eventi generati durante una richiesta per una risorsa ASP.NET. Un gestore HTTP è una classe responsabile di rendere una particolare risorsa o tipo di risorsa. Ogni volta che una pagina Web viene aggiunta al progetto, si sta essenzialmente scrivendo un gestore HTTP. Ciò accade perché quando la parte HTML di una pagina Web ASP.NET viene compilata dinamicamente in fase di esecuzione, direttamente o indirettamente eredita da Come sapete, un'applicazione ASP.NET consiste solitamente di un insieme di pagine Web che vengono richiamate quando richieste dal browser di un utente finale. Come sviluppatori di ASP.NET, la maggior parte del codice che scriviamo è specifico per una richiesta di una particolare pagina Web, come il codice di una classe dal codice sottostante di una particolare pagina per visualizzare i risultati del database basati su una qualche query di ricerca. A volte, però, occorre scrivere del codice che sia ortogonale ad una singola pagina Web, codice che si applica a tutte le pagine in un'applicazione. Supponiamo, ad esempio, di voler registrare l'ordine in cui ciascun utente si sposta sul sito Web. Ciascuna pagina dovrà registrare il momento della richiesta e le informazioni che identificano l'utente. Un modo per realizzare questa funzionalità di registrazione consiste nell'aggiungere il codice che ha registrato i dati pertinenti in un database nel gestore eventi Con i moduli e i gestori HTTP, tale riutilizzo e tale gestione sono possibili. Nell'articolo esamineremo un insieme di moduli e gestori HTTP che sono stati progettati per rendere la registrazione degli errori un'operazione altamente gestibile e riutilizzabile. L'obiettivo dell'articolo è quello di dimostrare come utilizzare i gestori e i moduli HTTP come tipo di componentizzazione ad alto livello, consentendo lo sviluppo, l'impacchettamento e la distribuzione di interi insiemi di funzionalità come un'unica unità e indipendente dalle applicazioni Web. Per raggiungere l'obiettivo esamineremo un'applicazione che beneficia del riutilizzo e componentizzazione mediante i gestori e i moduli HTTP. ELMAH: moduli e gestori per la registrazione degli erroriI moduli e i gestori per la registrazione degli errori (ELMAH: Error Logging Modules And Handlers) che esamineremo nel corso dell'articolo, sono stati scritti dal coautore Atif Aziz (www.raboof.com/) e rappresentano dei semplici mezzi per aggiungere funzionalità di registrazione degli errori ad un'applicazione Web ASP.NET. ELMAH mostra come utilizzare i moduli e i gestori HTTP in modo da fornire un altro grado di componentizzazione per il codice ortogonale all'applicazione Web (come la registrazione a livello dell'applicazione). ELMAH rappresenta una vera soluzione collegabile, dal momento che è possibile aggiungerla dinamicamente ad un'applicazione Web ASP.NET in esecuzione senza dover rieseguire la compilazione o la distribuzione. Anche quando un'applicazione Web è ben scritta e testata, è possibile che qualcosa vada storto. Potrebbe non trattarsi di un problema del codice, ma potrebbe essere il server di posta elettronica che non risponde o un danneggiamento dei dati che causa un errore di crittografia. Indipendentemente dal motivo, quando si verifica un errore, specialmente su un sito live, è fondamentale registrare i dettagli dell'errore per poter diagnosticare il problema. ELMAH fornisce un meccanismo centralizzato per la registrazione e la notifica degli errori. Quando in un'applicazione ASP.NET si verifica un'eccezione che non viene intercettata, ELMAH riceve la notifica e gestisce l'eccezione come descritto nel file Web.config. Ciò può significare registrare i dettagli dell'errore in un database, inviare un messaggio di posta elettronica all'amministratore o entrambe le cose. ELMAH non è progettata per rispondere normalmente ad eccezioni non gestite. Semplicemente registra i dettagli delle eccezioni non gestite. Quando si aggiunge ELMAH ad un'applicazione Web ASP.NET, qualunque eccezione non gestita generata nell'applicazione viene registrata. Quando si verifica un'eccezione non gestita, ELMAH non influisce sull'interazione da parte dell'utente finale. Gli utenti vedranno sempre la pagina "Errore del server" o, se vi sono errori personalizzati configurati per la gestione di errori HTTP 500, verranno reindirizzati su una pagina con un messaggio più significativo. Dietro le quinte, tuttavia, ELMAH avrà determinato che si è verificata un'eccezione e ne avrà registrato i dettagli. ELMAH scopre le eccezioni non gestite mediante l'evento Error dell'oggetto HttpApplication. L'evento Nota Per ulteriori informazioni sulla creazione di pagine di errore personalizzate, leggere l'articolo Gestione degli errori personalizzata tramite ASP.NET di Eli Robillard. Nota Quando si verifica un'eccezione non gestita in un servizio Web ASP.NET, l'evento
Oltre a registrare i dettagli di eccezioni non gestite, ELMAH è fornita di un insieme di gestori HTTP per la visualizzazione del registro degli errori. Esiste un'interfaccia Web del registro che fornisce un elenco di tutti gli errori non gestiti e i dettagli per un particolare errore (vedere le figure 1 e 2).
Figura 1. Visualizzazione del registro degli errori
Figura 2. Visualizzazione di un errore Tale registro degli errori viene anche reso come RSS, il che consente ad un amministratore di ricevere notifiche mediante l'aggregatore RSS preferito quando si è verificato un errore (vedere la figura 3).
Figura 3. Versione RSS degli errori Nota RSS (Really Simple Syndication) è uno standard in formato XML utilizzato comunemente per fornire notizie o altri tipi di contenuto variabile. Per ulteriori informazioni su RSS, compreso come fornire del contenuto utilizzando RSS e come creare un lettore RSS basato su Web, si consiglia la lettura di Creating an Online News Aggregator with ASP.NET. Per brevità, questo articolo accenna solo a un sottoinsieme delle funzionalità di ELMAH, concentrandosi sui componenti fondamentali. Dall'articolo è possibile scaricare il codice completo e vi incoraggiamo a studiarlo attentamente per giungere ai dettagli di implementazione. All'indirizzo workspaces.gotdotnet.com/elmah si trova anche un'installazione dell'area di lavoro GotDotNet per ELMAH a fini di discussione, segnalazione di problemi e aggiornamenti. Soluzioni esistenti per la registrazione centralizzata degli erroriAnche se ASP.NET non fornisce la registrazione degli errori e le funzionalità di visualizzazione incorporate, il gruppo Patterns & Practices di Microsoft ha creato un registratore degli errori open-source: Exception Management Application Block (EMAB). EMAB è stato progettato per funzionare sia con applicazioni .NET desktop che basate su Web, ma si intuisce che EMAB sia stato principalmente progettato per le applicazioni desktop e solo successivamente per le applicazioni Web poiché EMAB, per impostazione predefinita, pubblica i dettagli delle eccezioni sul registro eventi di Windows. Mentre il registro eventi è un archivio di backup adatto alle informazioni concise sulle eccezioni per un'applicazione desktop, la maggior parte delle applicazioni Web, specialmente quelle ospitate su un server condiviso di una società di Web hosting, si tengono lontane dal registro eventi poiché per utilizzarlo è necessario stabilire dei permessi speciali che consentano all'applicazione ASP.NET di scrivere su un registro eventi. EMAB è abbastanza flessibile da creare un editore personalizzato per registrare informazioni su un database, ma ciò comporta un compito ulteriore per gli sviluppatori. Nota ELMAH comprende un modulo di accesso al database per Microsoft SQL Server 2000, del quale ci occuperemo più avanti. Con ELMAH è possibile creare registratori di eccezioni personalizzati, come un registratore che registra i dettagli delle eccezioni su un file XML del file system del server Web. Se si possiede un editore personalizzato scritto per EMAB che si desidera utilizzare, è infatti possibile estendere ELMAH per utilizzare EMAB. La modalità in cui EMAB viene utilizzato per la registrazione delle informazioni sulle eccezioni condiziona notevolmente la gestione e il riutilizzo dell'applicazione Web. Ad esempio, un semplice approccio per registrare informazioni sulle eccezioni consiste nel racchiudere ciascun blocco di codice in ciascuna pagina Web ASP.NET da un blocco private void Page_Load(object sender, EventArgs e)
{
try {
// Code that might cause an exception
}
catch (Exception ex) {
// record exception information by calling exception logger library
}
}
Un tale approccio non è consigliabile poiché collega strettamente la registrazione delle eccezioni per ogni pagina Web ASP.NET, rendendola niente affatto gestibile e riutilizzabile. Un approccio migliore consiste nell'utilizzare EMAB nell'evento Lo scopo dell'articolo non è quello di introdurre un sostituto di EMAB. Piuttosto, è quello di evidenziare la componentizzazione resa possibile dai gestori e dai moduli HTTP. ELMAH mostra come sia possibile prendere un'operazione comune, quale la registrazione degli errori centralizzata, e componentizzarla per facilitarne la gestione e consentire un alto grado di riutilizzo. Lo scopo di ELMAH è quello di offrire assistenza per la componentizzazione di funzionalità applicabile. Breve panoramica sui gestori e i moduli HTTPPrima di esaminare le specifiche dell'architettura ed implementazione di ELMAH, occupiamoci un attimo dei gestori e dei moduli HTTP. Ogni volta che arriva una richiesta ad un server Web IIS, IIS esamina l'estensione della richiesta per decidere come procedere. Quando si tratta di contenuto statico come pagine HTML, file CSS, immagini, file JavaScript e così via, IIS gestisce da solo la richiesta. Nel caso di contenuto dinamico come pagine ASP, pagine Web ASP.NET e servizi Web ASP.NET, IIS delega la richiesta ad una estensione ISAPI specificata. Un'estensione ISAPI è un pezzo di codice non gestito in grado di eseguire il rendering di un tipo particolare di richieste. Ad esempio, l'estensione ISAPI Oltre alle estensioni ISAPI, IIS include anche i filtri ISAPI. Un filtro ISAPI è un pezzo di codice non gestito che può essere eseguito in risposta ad eventi generati da IIS. Durante il ciclo di vita di una richiesta, IIS passa attraverso un numero di passaggi che generano eventi corrispondenti. Ad esempio, un evento viene generato appena la richiesta raggiunge IIS, quando la richiesta sta per essere autenticata, quando il contenuto reso sta per essere reinviato al client e così via. I filtri ISAPI vengono normalmente utilizzati per fornire funzionalità come la riscrittura URL, la compressione, l'autenticazione e l'autorizzazione specializzate e la registrazione specializzata. Quando la richiesta per una risorsa ASP.NET raggiunge IIS, viene reindirizzata al modulo di gestione di ASP.NET, che rende il contenuto per la risorsa richiesta. Il modulo di gestione di ASP.NET si comporta come IIS in quanto genera un numero di eventi quando la richiesta passa attraverso la pipeline HTTP di ASP.NET. Il modulo di gestione di ASP.NET delega, inoltre, il rendering della risorsa richiesta ad una particolare classe. Mentre IIS utilizza le estensioni e i filtri ISAPI non gestiti, ASP.NET utilizza le classi gestite chiamate gestori e moduli HTTP. Un gestore HTTP è una classe responsabile di rendere un particolare tipo di risorsa. Ad esempio, la classe a codice sottostante per una pagina Web ASP.NET è un gestore HTTP in grado di rendere il tag per una particolare pagina Web. Conviene pensare ai gestori come a dei renderer specializzati in grado di creare il tag per un tipo particolare di risorse. Nota Per informazioni più approfondite sui gestori HTTP e per applicazioni pratiche dei gestori, si consiglia di leggere Serving Dynamic Content with HTTP Handlers. Un modulo HTTP è una classe in grado di accedere ai vari eventi generati al passaggio di una richiesta attraverso le fasi della sua durata sul server. Un evento di applicazione ASP.NET di questo tipo è l'evento Nota Per ulteriori informazioni sui moduli HTTP, compresa una panoramica su come utilizzare i moduli HTTP per implementare la riscrittura URL, consultare l'articolo Riscrittura URL in ASP.NET. La figura 4 fornisce una rappresentazione grafica della pipeline HTTP di ASP.NET. Notare che il processo inizia con una richiesta che arriva a IIS. Supponendo che la risorsa richiesta sia configurata per poter essere gestita dall'estensione ISAPI ASP.NET, IIS smista la richiesta all'estensione ISAPI
Figura 4. Flusso di dati attraverso il registratore degli errori ELMAH fornisce la registrazione centralizzata degli errori mediante un modulo HTTP che possiede un gestore eventi per l'evento La configurazione di un'applicazione Web esistente in grado di utilizzare vari gestori e moduli viene realizzata copiando l'assembly del modulo o del gestore nella directory Per configurare i moduli HTTP per un'applicazione Web, includere una sezione <httpModules> al file <httpModules> <add name="ModuleName" type="ModuleType" /> </httpModules> ModuleType è una stringa che indica il tipo di modulo, che consiste nel nome di classe completo (Namespace.ClassName) seguito dal nome dell'assembly. L'attributo <httpModules>
<add name="ErrorLog" type="GotDotNet.Elmah.ErrorLogModule,
GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral,
PublicKeyToken=978d5e1bd64b33e5" />
</httpModules>
Aggiungendo una sezione <httpHandlers> al file <httpHandlers> <add verb="*" path="*.ashx" type="HandlerType" /> </ httpHandlers > L'attributo <httpHandlers>
<add
verb="POST,GET,HEAD"
path="elmah/default.aspx"
type="GotDotNet.Elmah.ErrorLogPageFactory,
GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral,
PublicKeyToken=978d5e1bd64b33e5" />
</httpHandlers>
Abbiamo visto quanto sia semplice aggiungere moduli e gestori HTTP ad un'applicazione Web; ciò può essere eseguito in pochi secondi e non richiede alcuna ricompilazione o ridistribuzione dell'applicazione ASP.NET. Questo fa dei moduli e dei gestori HTTP un ottimo strumento per il riutilizzo, fornendo un mezzo per componentizzare l'applicazione in parti non strettamente collegate e altamente gestibili. Analisi dell'architettura di ELMAHL'architettura di ELMAH consiste di tre sottosistemi:
Il sottosistema per la registrazione degli errori ha due compiti: quello di registrare gli errori nel registro e quello di recuperare le informazioni sugli errori dal registro. Il sottosistema del modulo HTTP registra un errore quando si verifica un'eccezione non gestita nell'applicazione ASP.NET. Il sottosistema del gestore HTTP fornisce un mezzo per rendere il registro degli errori in tag, costituendo un'interfaccia basata su Web per il registro degli errori e una versione RSS. Come mostra la figura 5, entrambi i sottosistemi del modulo e del gestore HTTP utilizzano il sottosistema per la registrazione degli errori. Il sottosistema del modulo HTTP invia le informazioni sulle eccezioni al sottosistema per la registrazione degli errori, mentre il sottosistema del gestore HTTP legge e rende le informazioni sull'errore.
Figura 5. Sottosistema per la registrazione degli errori Per una migliore comprensione dell'architettura di ELMAH, esaminiamo i tre sottosistemi in maniera più dettagliata. Sottosistema per la registrazione degli erroriIl sottosistema per la registrazione degli errori registra gli errori nel registro e possiede delle funzionalità per il recupero dei dettagli di un particolare errore o di un sottoinsieme di errori. Questa funzionalità è resa disponibile da un certo numero di classi:
Esaminiamo ora le tre classi e il relativo funzionamento con i sottosistemi dei moduli HTTP e dei gestori HTTP in modo da fornire un'utilità completa per la registrazione centralizzata delle eccezioni. Analisi della classe ErrorLogA seconda della particolare strategia o installazione del progetto, verrà utilizzato un diverso archivio di backup per il registro degli errori. Su un server di produzione, ad esempio, le eccezioni saranno registrate su Microsoft SQL Server, mentre su un server di sviluppo sarà sufficiente archiviare gli errori in un insieme di file XML o in un database di Microsoft Access. Per poter utilizzare diversi archivi di backup, il sottosistema per la registrazione degli errori fornisce una classe di base astratta,
ELMAH comprende due implementazioni
È possibile utilizzare entrambi i registratori delle eccezioni semplicemente aggiungendo un paio di righe di testo al file Entrambi i sottosistemi del modulo e del gestore HTTP in ELMAH interagiscono direttamente con la classe Analisi della classe ErrorIl metodo Nella tabella 1 sono elencate tutte le proprietà di
Occorre dare delle spiegazioni circa la proprietà
Figura 6. Pagina di errore standard Quando si genera un'eccezione, si accede al tag HTML effettivo per la schermata corrispondente e il tag viene salvato nella proprietà Anche la classe La classe ErrorLogEntry: associare un errore ad un ErrorLogL'ultima classe del sottosistema per la registrazione degli errori è la classe
Mentre il metodo La figura 7 mostra una visualizzazione aggiornata dell'architettura ELMAH, mostrando maggiori dettagli nel sottosistema per la registrazione degli errori.
Figura 7. Architettura aggiornata Il sottosistema del modulo HTTPELMAH consiste di due moduli HTTP: public class ErrorLogModule : IHttpModule
{
public virtual void Init(HttpApplication application)
{
application.Error += new EventHandler(OnError);
}
protected virtual ErrorLog ErrorLog
{
get { return ErrorLog.Default; }
}
protected virtual void OnError(object sender, EventArgs args)
{
HttpApplication application = (HttpApplication) sender;
LogException(application.Server.GetLastError(),
application.Context);
}
protected virtual void LogException(Exception e,
HttpContext context)
{
try
{
this.ErrorLog.Log(new Error(e, context));
}
catch (Exception localException)
{
Trace.WriteLine(localException);
}
}
}
L'esecuzione di
Nota Nella sezione Aggiunta di ELMAH ad un'applicazione Web ASP.NET esamineremo come configurare un'applicazione Web per utilizzare un registratore delle eccezioni specifico. Ciò è semplice come aggiungere un paio di righe ai file Il secondo modulo HTTP del sottosistema del modulo HTTP è la classe Il sottosistema del gestore HTTPLo scopo dei gestori HTTP è quello di rendere il contenuto per un tipo particolare di risorsa. Quando nella pipeline HTTP di ASP.NET giunge una richiesta, il modulo di gestione ASP.NET esamina il percorso richiesto e stabilisce quale gestore HTTP utilizzare per gestire la risorsa richiesta. In particolare, è possibile configurare un'applicazione ASP.NET in modo che abbia un percorso particolare gestito da un gestore HTTP o da un factory di gestori HTTP. Un factory di gestori HTTP è una classe che non è direttamente responsabile di rendere il contenuto ma lo è nel selezionare e restituire un'istanza del gestore HTTP. Tale gestore HTTP restituito sarà quello a cui è stato affidato il compito di rendere la risorsa richiesta. Il sottosistema del gestore HTTP di ELMAH consiste di un numero di classi di gestori HTTP progettate per produrre tag per visualizzare gli errori registrati insieme ad una singola classe factory di gestori HTTP. La classe factory di gestori HTTP, Nota La parte Il pezzo di codice seguente mostra il codice più interessante della classe factory di gestori HTTP public class ErrorLogPageFactory : IHttpHandlerFactory
{
public virtual IHttpHandler GetHandler(HttpContext context,
string requestType, string url, string pathTranslated)
{
string resource =
context.Request.PathInfo.Length == 0 ? string.Empty :
context.Request.PathInfo.Substring(1);
switch (resource.ToLower(CultureInfo.InvariantCulture))
{
case "detail" :
return new ErrorDetailPage();
case "html" :
return new ErrorHtmlPage();
case "rss" :
return new ErrorRssHandler();
default :
return new ErrorLogPage();
}
}
}
Potete osservare che il metodo Nelle impostazioni dell'applicazione Web ASP.NET, occorre specificare un percorso associato al factory di gestori HTTP Le varie classi di gestori HTTP di ELMAH, Nota Mentre la classe Ora che abbiamo esaminato i tre sottosistemi di ELMAH, occupiamoci di come aggiungere ELMAH ad un'applicazione Web ASP.NET esistente. Si ponga particolare attenzione a come sia semplice aggiungere ELMAH ad ogni sito: un vantaggio della componentizzazione dato dai gestori e moduli HTTP. Aggiunta di ELMAH ad un'applicazione Web ASP.NETAggiungere ELMAH ad un'applicazione Web ASP.NET è piuttosto semplice e consiste di due passaggi:
È possibile applicare ELMAH ad un'applicazione Web particolare di un server Web copiando l'assembly nella directory Nel file
Il pezzo di codice seguente estratto dal file <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- Allows for a new section group to the Web.config -->
<sectionGroup name="gotdotnet.elmah">
<!-- Indicates that inside the section group there will be an
errorLog section -->
<section name="errorLog"
type="System.Configuration.SingleTagSectionHandler,
System, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
</configSections>
<!-- This section group contains the type of the exception logger
to use (SqlErrorLog, MemoryErrorLog, or a custom logger).
It also contain properties pertinent to the exception logger
(connectionString, for the SqlErrorLog). -->
<gotdotnet.elmah>
<errorLog type="GotDotNet.Elmah.SqlErrorLog,
GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral,
PublicKeyToken=978d5e1bd64b33e5"
connectionString="...connection string..." />
</gotdotnet.elmah>
<system.web>
<!-- Register that a request to aspnetham/errorlog.aspx should
be serviced by the ErrorLogPageFactory HTTP Handler factory -->
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah/default.aspx"
type="GotDotNet.Elmah.ErrorLogPageFactory,
Skybow.Samples.AspNetHam, Version=1.0.5527.0,
Culture=neutral, PublicKeyToken=978d5e1bd64b33e5" />
</httpHandlers>
<!-- Adds the ErrorLogModule HTTP Module to the HTTP pipeline. -->
<httpModules>
<add name="ErrorLog" type="GotDotNet.Elmah.ErrorLogModule,
GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral,
PublicKeyToken=978d5e1bd64b33e5" />
</httpModules>
...
</system.web>
</configuration>
L'elemento Nota Se, nel caso si verifichi un'eccezione non gestita, si desidera notificare l'amministratore tramite posta elettronica, occorre aggiungere un altro elemento La sezione La sezione Abbiamo mostrato quanto sia semplice aggiungere ELMAH ad una applicazione Web ASP.NET esistente. Il semplice riutilizzo e distribuzione di ELMAH è dovuto all'essere componentizzato utilizzando i moduli e i gestori HTTP. ConclusioniCi auguriamo che l'articolo abbia fatto luce sulla grande potenzialità dei moduli e gestori HTTP come strumenti per la componentizzazione di funzionalità ortogonale ad un'applicazione Web ASP.NET. Mediante gestori e moduli è possibile componentizzare operazioni comuni quali la registrazione centralizzata a livello dell'applicazione o il monitoraggio di richieste sull'intera applicazione. Raccogliendo questa funzionalità in un insieme di componenti, si ottengono vantaggi in termini di riutilizzo, gestibilità e distribuzione senza che sia necessaria alcuna migrazione, integrazione o ricompilazione del codice e applicazioni esistenti. Per dimostrare la componentizzazione possibile con i moduli e i gestori HTTP, abbiamo analizzato ELMAH, un'applicazione per la registrazione centralizzata e l'invio degli errori. ELMAH utilizza un modulo HTTP per avvertire qualsiasi evento Oltre al modulo HTTP, ELMAH comprende un insieme di gestori HTTP ed un factory di gestori HTTP per facilitare la visualizzazione del registro degli errori mediante strumenti basati su Web. Oltre alle pagine Web tradizionali, ciò comprende anche una versione RSS. ELMAH gestisce un discreto componente avendo la funzionalità di visualizzazione raccolta in un gestore HTTP, invece di richiedere all'applicazione Web di includere una pagina Web ASP.NET per mostrare tali informazioni. Mediate i gestori HTTP, distribuire ELMAH è un processo semplice che non richiede la ricompilazione dell'applicazione Web o il caricamento di una pagina Web ASP.NET sul server di produzione. ELMAH è solo un esempio della potenzialità di componentizzazione offerta dai gestori e dai moduli HTTP. Forse vi sono altri processi a livello di applicazione che possono beneficiare dalla componentizzazione mediante gestori e moduli. Buona programmazione! RingraziamentiPrima di sottoporre l'articolo alla redazione di MSDN, l'articolo è stato revisionato da un certo numero di volontari che hanno fornito il loro feedback sul contenuto, la grammatica e il senso dell'articolo. Tra i collaboratori principali per il processo di revisione, ringraziamo Milan Negovan, Carl Lambrecht, Dominique Kuster, Roman Mathis, Raffael Zaghet, Muhammad Abubakar e Patrick Schuler. Riferimenti
Pubblicazioni correlate
Atif Aziz ha quasi 13 anni di esperienza nello sviluppo di soluzioni per la piattaforma Microsoft. È un direttore consulente per Skybow AG e il suo obiettivo principale consiste nel supportare i clienti nella comprensione e creazione di soluzioni per la piattaforma di sviluppo .NET. Atif contribuisce regolarmente alla comunità degli sviluppatori Microsoft intervenendo a conferenze Microsoft e non e scrivendo articoli per pubblicazioni di tipo tecnico. È un relatore per INETA ed è presidente di Swiss .NET User Group (dotMUGS). Può essere contattato all'indirizzo di posta elettronica atif.aziz@skybow.com o tramite il suo sito Web all'indirizzo www.raboof.com/. Scott Mitchell, autore di cinque libri su ASP/ASP.NET e fondatore del sito 4GuysFromRolla.com, utilizza le tecnologie Web di Microsoft dal 1998. Scott lavora come consulente, insegnante e scrittore indipendente. Può essere contattato all'indirizzo di posta elettronica mitchell@4guysfromrolla o tramite il suo blog che si trova all'indirizzo scottonwriting.net/. |
© 2004 Microsoft Corporation. Tutti i diritti riservati. Note legali.