Procédure pas à pas : création et inscription de fabriques de gestionnaires HTTP

Mise à jour : novembre 2007

L'interface IHttpHandlerFactory crée et gère des gestionnaires HTTP pour traiter des demandes. Par conséquent, vous pouvez créer une classe qui implémente l'interface IHttpHandlerFactory, puis utilisez cette classe comme un gestionnaire HTTP.

En créant des gestionnaires selon cette procédure, vous pouvez exercer un contrôle plus grand sur le traitement des requêtes HTTP. Cette procédure vous permet en effet de mapper une URL à une fabrique de gestionnaires HTTP qui crée différents gestionnaires selon un ensemble de conditions définies. Par exemple, avec une fabrique de gestionnaires HTTP, vous pouvez créer un nombre limité d'objets de gestionnaire HTTP qui accèdent à des ressources coûteuses ou limitées, telles que les connexions de base de données. Vous pouvez ensuite réutiliser ces objets de gestionnaire lors de prochaines demandes.

Dans cette procédure pas à pas, vous allez créer une fabrique de gestionnaires HTTP qui créera deux gestionnaires pour les ressources identifiées par l'extension .sample. L'un de ces gestionnaires fonctionne avec les ressources impliquées dans une demande HTTP GET, tandis que l'autre fonctionne avec les demandes HTTP POST. Le premier gestionnaire est une instance du gestionnaire décrit dans Procédure pas à pas : création d'un gestionnaire HTTP synchrone. Le second est une instance du gestionnaire décrit dans Comment : créer un gestionnaire HTTP asynchrone.

Cette procédure pas à pas décrit notamment les tâches suivantes :

  • Création de code pour une classe de fabrique de gestionnaires HTTP ;

  • Inscription de la fabrique de gestionnaires dans le fichier Web.config et mappage de l'extension de nom de fichier .sample à celle-ci ;

  • Mappage de l'extension de nom de fichier .sample à ASP.NET dans les services IIS.

Composants requis

Pour exécuter cette procédure pas à pas, vous avez besoin de :

  • Visual Studio ou Visual Web Developer ;

  • Un site Web ASP.NET que vous pouvez exécuter à l'aide des services IIS ;

  • IIS 6.0 ou IIS 7.0.

Création d'une fabrique de gestionnaires HTTP personnalisée

Pour commencer, vous allez créer une classe de fabrique de gestionnaires.

Pour créer une classe de fabrique de gestionnaires HTTP

  1. Si le site Web ASP.NET ne comporte pas de dossier App_Code, créez-en un sous la racine du site.

  2. Dans le répertoire App_Code, créez une classe nommée HelloWorldHandler.

  3. Ajoutez le code suivant au fichier de 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;
            }
        }
    }
    

    Le code implémente la méthode GetHandler de l'interface IHttpHandlerFactory. Si la demande est une demande GET, la méthode retourne l'interface de gestionnaire synchrone. Si la demande est une demande POST, il retourne l'interface de gestionnaire asynchrone.

Création de gestionnaires HTTP personnalisés

La fabrique de gestionnaires HTTP personnalisée retourne soit le gestionnaire synchrone décrit dans Procédure pas à pas : création d'un gestionnaire HTTP synchrone, soit le gestionnaire asynchrone décrit dans Comment : créer un gestionnaire HTTP asynchrone. Vous devez créer à la fois la classe HelloWorldHandler synchrone et la classe HelloWorldAsyncHandler asynchrone afin que la fabrique de gestionnaires HTTP personnalisée puisse retourner ces gestionnaires.

Pour créer les classes HelloWorldHandler et HelloWorldAsyncHandler

  1. Dans le répertoire App_Code du site Web, créez une classe nommée HelloWorldHandler.

  2. Ajoutez le code provenant de Procédure pas à pas : création d'un gestionnaire HTTP synchrone au fichier de classe :

  3. Dans le répertoire App_Code du site Web, créez une classe nommée HelloWorldAsyncHandler.

  4. Ajoutez le code provenant de Comment : créer un gestionnaire HTTP asynchrone au fichier de classe :

Inscription de la fabrique de gestionnaires HTTP personnalisée dans IIS 6.0

Après avoir créé la classe de fabrique de gestionnaires HTTP personnalisée, vous devez l'inscrire dans le fichier Web.config de l'application. Ainsi, ASP.NET peut utiliser cette classe de fabrique de gestionnaires pour les demandes de service effectuées pour les ressources portant l'extension de nom de fichier .sample.

Différentes procédures permettent d'inscrire un gestionnaire, selon la version d'IIS utilisée (IIS 6.0 ou IIS 7.0). Cette section décrit comment inscrire un gestionnaire dans IIS 6.0. La section suivante décrit comment inscrire un gestionnaire dans IIS 7.0.

Pour enregistrer la fabrique de gestionnaires dans IIS 6.0

  1. Si le site Web ne comporte pas de fichier Web.config, créez-en un à la racine du site.

  2. Ajoutez l'élément en surbrillance suivant à votre fichier Web.config.

    <configuration>
      <system.web>
        <httpHandlers>      <add verb="GET,POST" path="*.sample"        type="HandlerFactory" />    </httpHandlers>
      </system.web>
    </configuration>
    

    Le code inscrit la fabrique de gestionnaires avec le nom de classe et le nom de gestionnaire de HandlerFactory.

  3. Enregistrez un mappage d'extension de fichier pour l'extension de nom de fichier .sample à l'aide du Gestionnaire des services IIS. Pour plus d'informations, consultez Comment : configurer une extension du gestionnaire HTTP dans IIS.

Inscription de la fabrique de gestionnaires HTTP personnalisée dans IIS 7.0

Dans IIS 7.0, une application peut s'exécuter en mode classique ou intégré. En mode classique, le traitement des demandes est fortement similaire à celui appliqué dans IIS 6.0. En mode intégré, IIS 7.0 gère les demandes à l'aide d'un pipeline qui lui permet de partager demandes, modules et autres fonctionnalités avec ASP.NET.

Avec IIS 7.0, l'inscription de la fabrique de gestionnaires s'effectue soit dans le fichier Web.config, soit dans Gestionnaire des services IIS. L'administration étant centralisée dans IIS 7.0, toute modification apportée dans le fichier Web.config d'une application est répercutée dans l'interface Gestionnaire des services IIS pour l'application et inversement. Dans les procédures qui suivent, les gestionnaires sont inscrits dans le fichier Web.config.

Pour inscrire la fabrique de gestionnaires dans IIS 7.0 en mode classique

  1. Si le site Web ne possède pas de fichier Web.config, créez-en un.

  2. Ajoutez l'élément en surbrillance suivant à votre fichier Web.config.

    Remarque :

    Substituez le chemin d'accès correct au fichier aspnet_isapi.dll. Le fichier .dll se trouve dans le dossier où le .NET Framework est installé. Par défaut, il s'agit du chemin suivant : 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>
    

    L'élément de configuration inscrit la fabrique de gestionnaire personnalisée par nom de classe et mappe l'extension de nom de fichier .sample à ce gestionnaire.

    Remarque :

    Dans la mesure où vous inscrivez une extension de nom de fichier personnalisée, l'inscription du gestionnaire est effectuée à la fois dans la section handlers et dans la section httpHandlers. En mode classique, pour la compatibilité descendante, le gestionnaire est spécifié comme un module ISAPI à l'aide de l'attribut modules. Le chemin d'accès du dll ISAPI ASP.NET est spécifié à l'aide de l'attribut scriptProcessor. L'attribut name est requis dans la section handlers.

Pour inscrire la fabrique de gestionnaires dans IIS 7.0 en mode intégré

  1. Si le site Web ne possède pas de fichier Web.config, créez-en un à la racine du site.

  2. Ajoutez l'élément en surbrillance suivant à votre fichier Web.config.

    <configuration>
      <system.webServer>
        <handlers>      <add verb="GET,POST" path="*.sample"         name="HandlerFactory"        type="HandlerFactory"/>    </handlers>
      </system.webServer>
    </configuration>
    

    L'élément de configuration inscrit la fabrique de gestionnaire personnalisée par nom de classe et mappe l'extension de nom de fichier .sample à ce gestionnaire.

    Remarque :

    L'inscription est effectuée dans la section handlers, mais pas dans la section httpHandlers. L'attribut name est requis.

Test de la fabrique de gestionnaires HTTP personnalisée

Après avoir créé et inscrit votre fabrique de gestionnaires HTTP personnalisée, vous pouvez la tester.

Pour tester la fabrique de gestionnaires HTTP personnalisée

  1. Créez une page HTML (suivie d'une extension de nom de fichier .htm) dans votre application.

  2. Dans la section body de la page, ajoutez le balisage suivant :

    <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. Demandez la page HTML dans un navigateur.

  4. Cliquez sur l'un des boutons.

    Si vous cliquez sur le premier bouton, la fabrique de gestionnaires HTTP répond à la demande en créant et en appelant un gestionnaire HTTP synchrone. Si vous cliquez sur le second bouton, la fabrique de gestionnaires HTTP répond à la demande en créant et en appelant un gestionnaire HTTP asynchrone.

Voir aussi

Tâches

Comment : créer un gestionnaire HTTP asynchrone

Procédure pas à pas : création d'un gestionnaire HTTP synchrone

Concepts

Vue d'ensemble du cycle de vie des applications ASP.NET pour IIS 5.0 et 6.0

Autres ressources

Introduction aux gestionnaires HTTP