Exemplarische Vorgehensweise: Erstellen und Registrieren von HTTP-Handlerfactorys
Aktualisiert: November 2007
Die IHttpHandlerFactory-Schnittstelle erstellt und verwaltet HTTP-Handler zum Verarbeiten von Anforderungen. Folglich ist es möglich, eine Klasse zum Implementieren der IHttpHandlerFactory-Schnittstelle zu erstellen, und anschließend diese Klasse als HTTP-Handler zu verwenden.
Handler auf diese Art zu erstellen, ermöglicht eine genauere Kontrolle über die Verarbeitung einer HTTP-Anforderung. Eine URL kann so einer HTTP-Handlerfactory zugeordnet werden, die verschiedene Handler auf der Grundlage von Bedingungen erstellt. Mit einer HTTP-Handlerfactory können Sie beispielsweise eine begrenzte Anzahl von HTTP-Handlerobjekten erstellen, die auf aufwändige oder begrenzte Ressourcen zugreifen, z. B. Datenbankverbindungen. Diese Handlerobjekte können in zukünftigen Anforderungen wiederverwendet werden.
In dieser exemplarischen Vorgehensweise wird eine HTTP-Handlerfactory erstellt, die zwei Handler mit der SAMPLE-Erweiterung für Ressourcen erstellt. Einer der Handler arbeitet während einer HTTP-GET-Anforderung mit Ressourcen, während der andere Handler mit HTTP-POST-Anforderungen arbeitet. Der erste Handler ist eine Instanz des in Exemplarische Vorgehensweise: Erstellen eines synchronen HTTP-Handlers beschriebenen Handlers. Der zweite Handler ist eine Instanz des in Gewusst wie: Erstellen eines asynchronen HTTP-Handlers beschriebenen Handlers.
In dieser exemplarischen Vorgehensweise werden u. a. die folgenden Aufgaben veranschaulicht:
Erstellen von Code für eine HTTP-Handlerfactoryklasse.
Registrieren der Handlerfactory in der Datei Web.config und Zuordnen der SAMPLE-Dateinamenerweiterung.
Zuordnen der SAMPLE-Dateinamenerweiterung für ASP.NET in Internetinformationsdienste (IIS).
Voraussetzungen
Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:
Visual Studio oder Visual Web Developer.
Eine ASP.NET-Website, die mit IIS ausgeführt werden kann.
IIS 6.0 oder IIS 7.0.
Erstellen einer benutzerdefinierten HTTP-Handlerfactory
Erstellen Sie zuerst eine Handlerfactoryklasse.
So erstellen Sie eine HTTP-Handlerfactoryklasse
Wenn auf der ASP.NET-Webseite der Ordner App_Code noch nicht vorhanden ist, erstellen Sie ihn im Stammverzeichnis der Site.
Erstellen Sie im Verzeichnis App_Code eine Klasse mit dem Namen HelloWorldHandler.
Fügen Sie der Klassendatei den folgenden Code hinzu:
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; } } }
Der Code implementiert die GetHandler-Methode der IHttpHandlerFactory-Schnittstelle. Wenn es sich bei der Anforderung um eine GET-Anforderung handelt, gibt die Methode die synchrone Handlerschnittstelle zurück. Wenn die Anforderung eine POST-Anforderung ist, gibt sie die asynchrone Handlerschnittstelle zurück.
Erstellen von benutzerdefinierten HTTP-Handlern
Die benutzerdefinierte HTTP-Handlerfactory gibt entweder den in Exemplarische Vorgehensweise: Erstellen eines synchronen HTTP-Handlers beschriebenen synchronen Handler oder den in Gewusst wie: Erstellen eines asynchronen HTTP-Handlers beschriebenen asynchronen Handler zurück. Sie müssen die synchrone HelloWorldHandler-Klasse und die asynchrone HelloWorldAsyncHandler-Klasse erstellen, damit die benutzerdefinierte HTTP-Handlerfactory diese Handler zurückgeben kann.
So erstellen Sie die HelloWorldHandler-Klasse und die HelloWorldAsyncHandler-Klasse
Erstellen Sie im Verzeichnis App_Code der Website die HelloWorldHandler-Klasse.
Fügen Sie der Klassendatei den Code aus Exemplarische Vorgehensweise: Erstellen eines synchronen HTTP-Handlers hinzu.
Erstellen Sie im Verzeichnis App_Code der Website die HelloWorldAsyncHandler-Klasse.
Fügen Sie der Klassendatei den Code aus Gewusst wie: Erstellen eines asynchronen HTTP-Handlers hinzu.
Registrieren der benutzerdefinierten HTTP-Handlerfactory in IIS 6.0
Nachdem die benutzerdefinierte HTTP-Handlerfactoryklasse erstellt wurde, muss sie in der Datei Web.config der Anwendung registriert werden. Dadurch kann ASP.NET mithilfe der Handlerfactoryklasse Anforderungen bearbeiten, die an Ressourcen mit der SAMPLE-Dateinamenerweiterung gestellt wurden.
Für das Registrieren des Handlers gibt es unterschiedliche Methoden, je nachdem, ob Sie IIS 6.0 oder IIS 7.0 verwenden. In diesem Abschnitt wird beschrieben, wie ein Handler in IIS 6.0 registriert wird. Im nächsten Abschnitt wird beschrieben, wie ein Handler in IIS 7.0 registriert wird.
So registrieren Sie die Handlerfactory in IIS 6.0
Wenn für die Website noch keine Web.config-Datei vorhanden ist, erstellen Sie diese im Stammverzeichnis der Website.
Fügen Sie der Datei Web.config das folgende markierte Element hinzu.
<configuration> <system.web> <httpHandlers> <add verb="GET,POST" path="*.sample" type="HandlerFactory" /> </httpHandlers> </system.web> </configuration>
Der Code registriert die Handlerfactory mit dem Klassennamen und dem Handlernamen HandlerFactory.
Registrieren Sie mithilfe von IIS-Manager eine Zuordnung für Anwendungserweiterungen für die SAMPLE-Dateinamenerweiterung. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren einer HTTP-Handlererweiterung in IIS.
Registrieren der benutzerdefinierten HTTP-Handlerfactory in IIS 7.0
In IIS 7.0 kann eine Anwendung im klassischen oder im integrierten Modus ausgeführt werden. Im klassischen Modus werden Anforderungen annähernd auf die gleiche Weise verarbeitet wie in IIS 6.0. Im integrierten Modus werden Anforderungen von IIS 7.0 mithilfe einer Pipeline verwaltet, sodass Anforderungen, Module und andere Features für ASP.NET freigegeben werden können.
Für IIS 7.0 registrieren Sie die Handlerfactory entweder in der Datei Web.config oder in IIS-Manager. Da die Administration in IIS 7.0 zentralisiert wurde, werden Änderungen in der Datei Web.config der Anwendung in der IIS-Manager-Schnittstelle der Anwendung reflektiert und umgekehrt. In den folgenden Verfahren werden die Handler in der Datei Web.config registriert.
So registrieren Sie die Handlerfactory in IIS 7.0 im klassischen Modus
Wenn die Website noch keine Web.config-Datei besitzt, erstellen Sie diese.
Fügen Sie der Datei Web.config das folgende markierte Element hinzu.
Hinweis: Ersetzen Sie den richtigen Pfad für die Datei aspnet_isapi.dll. Die DLL-Datei befindet sich in dem Ordner, in dem .NET Framework installiert ist. Standardmäßig ist dies C:\WINDOWS\Microsoft.NET\Framework\Version.
<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>
Das Konfigurationselement registriert die benutzerdefinierte Handlerfactory nach dem Klassennamen und ordnet diesem Handler die SAMPLE-Dateinamenerweiterung zu.
Hinweis: Registrieren Sie den Handler sowohl im Abschnitt handlers als auch im Abschnitt httpHandlers, da Sie eine benutzerdefinierte Dateinamenerweiterung registrieren. Im klassischen Modus ist der Handler mithilfe des modules-Attributs als ISAPI-Modul angegeben, um die Abwärtskompatibilität zu gewährleisten. Der Pfad der ASP.NET-ISAPI-DLL wird durch das scriptProcessor-Attribut angegeben. Das name-Attribut ist im handlers-Abschnitt erforderlich.
So registrieren Sie die Handlerfactory in IIS 7.0 im integrierten Modus
Wenn für die Website noch keine Web.config-Datei vorhanden ist, erstellen Sie diese im Stammverzeichnis der Website.
Fügen Sie der Datei Web.config das folgende markierte Element hinzu.
<configuration> <system.webServer> <handlers> <add verb="GET,POST" path="*.sample" name="HandlerFactory" type="HandlerFactory"/> </handlers> </system.webServer> </configuration>
Das Konfigurationselement registriert die benutzerdefinierte Handlerfactory nach dem Klassennamen und ordnet diesem Handler die SAMPLE-Dateinamenerweiterung zu.
Hinweis: Die Registrierung wird im Abschnitt handlers durchgeführt, jedoch nicht im Abschnitt httpHandlers. Das name-Attribut ist erforderlich.
Testen der benutzerdefinierten HTTP-Handlerfactory
Nach dem Erstellen und Registrieren der benutzerdefinierten HTTP-Handlerfactory können Sie diese testen.
So testen Sie die benutzerdefinierte HTTP-Handlerfactory
Erstellen Sie in der Anwendung eine HTML-Seite (mit der Dateinamenerweiterung .htm).
Fügen Sie im Abschnitt body der Seite das folgenden Markup hinzu.
<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>
Fordern Sie die HTML-Seite in einem Browser an.
Klicken Sie auf eine der Schaltflächen.
Wenn Sie auf die erste Schaltfläche klicken, reagiert die HTTP-Handlerfactory auf die Anforderung mit dem Erstellen und Aufrufen eines synchronen HTTP-Handlers. Wenn Sie auf die zweite Schaltfläche klicken, reagiert die HTTP-Handlerfactory auf die Anforderung mit dem Erstellen und Aufrufen eines asynchronen HTTP-Handlers.
Siehe auch
Aufgaben
Gewusst wie: Erstellen eines asynchronen HTTP-Handlers
Exemplarische Vorgehensweise: Erstellen eines synchronen HTTP-Handlers
Konzepte
Übersicht über den Lebenszyklus von ASP.NET-Anwendungen für IIS 5.0 und 6.0