Procedura dettagliata: creazione e registrazione di factory di gestori HTTP
Aggiornamento: novembre 2007
L'interfaccia IHttpHandlerFactory consente di creare e gestire gestori HTTP per l'elaborazione delle richieste. È possibile quindi creare una classe che implementa l'interfaccia IHttpHandlerFactory e utilizzare tale classe come gestore HTTP.
Questo metodo di creazione dei gestori può offrire un controllo più preciso sull'elaborazione di una richiesta HTTP. Consente di eseguire il mapping di un URL a una factory di gestori HTTP che crea gestori diversi in base a un insieme di condizioni. Utilizzando una factory di gestori HTTP, ad esempio, è possibile creare un numero limitato di oggetti gestore HTTP che accedono a risorse limitate o costose, quali le connessioni di database. Tali oggetti possono quindi essere riutilizzati nelle richieste future.
In questa procedura dettagliata verrà creata una factory di gestori HTTP che crea due gestori per le risorse identificate con l'estensione SAMPLE. Un gestore utilizza le risorse durante una richiesta HTTP GET, mentre l'altro gestore utilizza le richieste HTTP POST. Il primo gestore è un'istanza del gestore descritto in Procedura dettagliata: creazione di un gestore HTTP sincrono. Il secondo gestore è un'istanza del gestore descritto in Procedura: creare un gestore HTTP asincrono.
Di seguito sono elencate alcune delle attività illustrate nella procedura dettagliata:
Creazione di codice per una classe della factory di gestori HTTP.
Registrazione della factory di gestori nel file Web.config e mapping dell'estensione di file SAMPLE a tale factory.
Mapping dell'estensione di file SAMPLE ad ASP.NET in Internet Information Services (IIS).
Prerequisiti
Per completare questa procedura dettagliata è necessario disporre dei seguenti elementi:
Visual Studio o Visual Web Developer.
Un sito Web ASP.NET eseguibile mediante IIS.
IIS 6.0 o IIS 7.0.
Creazione di una factory di gestori HTTP personalizzati
Per iniziare verrà creata una classe della factory di gestori.
Per creare una classe della factory di gestori HTTP
Se il sito Web ASP.NET non possiede ancora una cartella App_Code, crearne una nella radice del sito.
Nella directory App_Code, creare una classe denominata HelloWorldHandler.
Aggiungere il seguente codice al file della classe.
Imports System Imports System.Web Class HandlerFactory Implements IHttpHandlerFactory Public Function GetHandler(ByVal context As HttpContext, _ ByVal requestType As String, ByVal url As [String],_ ByVal pathTranslated As [String]) As IHttpHandler _ Implements IHttpHandlerFactory.GetHandler Dim handlerToReturn As IHttpHandler Dim requestType as String = _ context.Request.RequestType.ToLower() If "get" = requestType Then handlerToReturn = New HelloWorldHandler() Else If "post" = requestType Then handlerToReturn = New HelloWorldAsyncHandler() Else handlerToReturn = Nothing End If End If Return handlerToReturn End Function Public Sub ReleaseHandler(ByVal handler As IHttpHandler) _ Implements IHttpHandlerFactory.ReleaseHandler End Sub Public ReadOnly Property IsReusable() As Boolean Get Return False End Get End Property End Class
using System; using System.Web; class HandlerFactory : IHttpHandlerFactory { public IHttpHandler GetHandler(HttpContext context, string requestType, String url, String pathTranslated) { IHttpHandler handlerToReturn; if ("get" == context.Request.RequestType.ToLower()) { handlerToReturn = new HelloWorldHandler(); } else if ("post" == context.Request.RequestType.ToLower()) { handlerToReturn = new HelloWorldAsyncHandler(); } else { handlerToReturn = null; } return handlerToReturn; } public void ReleaseHandler(IHttpHandler handler) { } public bool IsReusable { get { return false; } } }
Il codice implementa il metodo GetHandler dell'interfaccia IHttpHandlerFactory. Se la richiesta è di tipo GET, il metodo restituisce l'interfaccia del gestore sincrono; mentre se la richiesta è di tipo POST, viene restituita l'interfaccia del gestore asincrono.
Creazione di gestori HTTP personalizzati
Affinché la factory di gestori HTTP personalizzati restituisca il gestore sincrono descritto in Procedura dettagliata: creazione di un gestore HTTP sincrono o il gestore asincrono descritto in Procedura: creare un gestore HTTP asincrono, è necessario creare sia la classe HelloWorldHandler sincrona sia la classe HelloWorldAsyncHandler asincrona.
Per creare le classi HelloWorldHandler e HelloWorldAsyncHandler
Nella directory App_Code del sito Web, creare una classe denominata HelloWorldHandler.
Aggiungere il codice riportato in Procedura dettagliata: creazione di un gestore HTTP sincrono al file della classe.
Nella directory App_Code del sito Web, creare una classe denominata HelloWorldAsyncHandler.
Aggiungere il codice riportato in Procedura: creare un gestore HTTP asincrono al file della classe.
Registrazione della factory di gestori HTTP personalizzati in IIS 6.0
Una volta creata la classe della factory di gestori HTTP personalizzati, è necessario registrarla nel file Web.config dell'applicazione per consentirne l'utilizzo da parte di ASP.NET per l'elaborazione delle richieste effettuate a risorse con estensione di file SAMPLE.
Le procedure per la registrazione del gestore possono essere diverse, a seconda che si utilizzi IIS 6.0 o IIS 7.0. In questa sezione viene descritto come registrare un gestore in IIS 6.0. Nella sezione successiva verrà descritto come registrare un gestore in IIS 7.0.
Per registrare la factory di gestori in IIS 6.0
Se il sito Web non possiede ancora un file Web.config, crearne uno nella radice del sito.
Aggiungere l'elemento evidenziato di seguito al file Web.config:
<configuration> <system.web> <httpHandlers> <add verb="GET,POST" path="*.sample" type="HandlerFactory" /> </httpHandlers> </system.web> </configuration>
Il codice registra la factory di gestori con il nome della classe e il nome del gestore HandlerFactory.
Registrare il mapping di un'estensione dell'applicazione per l'estensione di file SAMPLE utilizzando Gestione IIS. Per ulteriori informazioni, vedere Procedura: configurare un'estensione del gestore HTTP in IIS.
Registrazione della factory di gestori HTTP personalizzati in IIS 7.0
In IIS 7.0 un'applicazione può essere eseguita in modalità classica o integrata. In modalità classica le richieste vengono elaborate in modo molto simile a quanto avviene in IIS 6.0. In modalità integrata, IIS 7.0 gestisce le richieste utilizzando una pipeline che consente di condividere richieste, moduli e altre funzionalità con ASP.NET.
Nel caso di IIS 7.0, la factory di gestori viene registrata nel file Web.config o in Gestione IIS. Poiché in IIS 7.0 l'amministrazione è centralizzata, le modifiche apportate al file Web.config di un'applicazione si riflettono nell'interfaccia di Gestione IIS per l'applicazione e viceversa. Nelle procedure che seguono i gestori vengono registrati nel file Web.config.
Per registrare la factory di gestori in IIS 7.0 eseguito in modalità classica
Se il sito Web non possiede ancora un file Web.config, crearne uno.
Aggiungere l'elemento evidenziato di seguito al file Web.config:
Nota: Sostituire il percorso corretto per il file aspnet_isapi.dll. Il file DLL si trova nella cartella in cui è installato .NET Framework. Per impostazione predefinita, la cartella è C:\WINDOWS\Microsoft.NET\Framework\versione.
<configuration> <system.webServer> <handlers> <add verb="GET,POST" path="*.sample" name="HandlerFactory" type="HandlerFactory" modules="IsapiModule"/> scriptProcessor="%path%\aspnet_isapi.dll" </handlers> </system.webServer> </configuration>
L'elemento di configurazione registra la factory di gestori personalizzati in base al nome della classe ed esegue il mapping dell'estensione di file SAMPLE al gestore.
Nota: Poiché si sta registrando un'estensione di file personalizzata, il gestore viene registrato sia nella sezione handlers sia nella sezione httpHandlers. In modalità classica, ai fini della compatibilità con le versioni precedenti, il gestore viene specificato come modulo ISAPI utilizzando l'attributo modules. Il percorso del file DLL ISAPI ASP.NET viene specificato mediante l'attributo scriptProcessor. L'attributo name è obbligatorio nella sezione handlers.
Per registrare la factory di gestori in IIS 7.0 eseguito in modalità integrata
Se il sito Web non possiede ancora un file Web.config, crearne uno nella radice del sito.
Aggiungere l'elemento evidenziato di seguito al file Web.config:
<configuration> <system.webServer> <handlers> <add verb="GET,POST" path="*.sample" name="HandlerFactory" type="HandlerFactory"/> </handlers> </system.webServer> </configuration>
L'elemento di configurazione registra la factory di gestori personalizzati in base al nome della classe ed esegue il mapping dell'estensione di file SAMPLE al gestore.
Nota: La registrazione viene effettuata nella sezione handlers, non nella sezione httpHandlers. L'attributo name è obbligatorio.
Test della factory di gestori HTTP personalizzati
Dopo aver creato e registrato la factory di gestori HTTP personalizzati, è possibile testarla.
Per testare la factory di gestori HTTP personalizzati
Creare una pagina HTML (con estensione HTM) nell'applicazione.
Aggiungere il markup riportato di seguito nella sezione body della pagina.
<form action="Sample.sample" method="get"> <input type="submit" value="Submit to Sample.sample via Get" /> </form> <br /> <form action="Sample.sample" method="post"> <input type="submit" value="Submit to Sample.sample via Post" /> </form>
Richiedere la pagina HTML in un browser.
Fare clic su uno dei pulsanti.
Scegliendo il primo pulsante, la factory di gestori HTTP risponde alla richiesta creando e chiamando un gestore HTTP sincrono. Scegliendo il secondo pulsante, la factory di gestori HTTP risponde alla richiesta creando e chiamando un gestore HTTP asincrono.
Vedere anche
Attività
Procedura: creare un gestore HTTP asincrono
Procedura dettagliata: creazione di un gestore HTTP sincrono
Concetti
Cenni preliminari sul ciclo di vita delle applicazioni ASP.NET per IIS 5.0 e 6.0