Freigeben über


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

  1. Wenn auf der ASP.NET-Webseite der Ordner App_Code noch nicht vorhanden ist, erstellen Sie ihn im Stammverzeichnis der Site.

  2. Erstellen Sie im Verzeichnis App_Code eine Klasse mit dem Namen HelloWorldHandler.

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

  1. Erstellen Sie im Verzeichnis App_Code der Website die HelloWorldHandler-Klasse.

  2. Fügen Sie der Klassendatei den Code aus Exemplarische Vorgehensweise: Erstellen eines synchronen HTTP-Handlers hinzu.

  3. Erstellen Sie im Verzeichnis App_Code der Website die HelloWorldAsyncHandler-Klasse.

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

  1. Wenn für die Website noch keine Web.config-Datei vorhanden ist, erstellen Sie diese im Stammverzeichnis der Website.

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

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

  1. Wenn die Website noch keine Web.config-Datei besitzt, erstellen Sie diese.

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

  1. Wenn für die Website noch keine Web.config-Datei vorhanden ist, erstellen Sie diese im Stammverzeichnis der Website.

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

  1. Erstellen Sie in der Anwendung eine HTML-Seite (mit der Dateinamenerweiterung .htm).

  2. 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>
    
  3. Fordern Sie die HTML-Seite in einem Browser an.

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

Weitere Ressourcen

Einführung in HTTP-Handler