Partager via


Gestionnaires de gestionnaires <>

Aperçu

L’élément <handlers> définit les gestionnaires inscrits pour une extension ou une URL de nom de fichier spécifique.

Les gestionnaires sont des composants IIS (Internet Information Services) configurés pour traiter les demandes à un contenu spécifique, généralement pour générer une réponse pour la ressource de requête. Par exemple, une page web ASP.NET est un type de gestionnaire. Vous pouvez utiliser des gestionnaires pour traiter les demandes adressées à n’importe quelle ressource qui doit retourner des informations aux utilisateurs qui ne sont pas un fichier statique. IIS fournit plusieurs types de gestionnaires différents pour prendre en charge les fichiers statiques, les applications CGI (Common Gateway Interface), les applications FastCGI et les extensions ISAPI (Internet Server API). ASP.NET fournit également la prise en charge des types de gestionnaires supplémentaires via l’interface du gestionnaire HTTP.

Les développeurs peuvent créer des gestionnaires personnalisés pour effectuer une gestion spéciale que vous pouvez identifier à l’aide d’extensions de nom de fichier dans votre application. Par exemple, si un développeur a créé un gestionnaire au format XML au format RSS, vous pouvez lier l’extension de nom de fichier .rss dans votre application au gestionnaire personnalisé. Les développeurs peuvent également créer des gestionnaires qui mappent à un fichier spécifique et peuvent implémenter ces gestionnaires en tant que modules natifs ou en tant qu’implémentations de l’interface ASP.NET IHttpHandler .

Compatibilité

Version Remarques
IIS 10.0 L’élément <handlers> n’a pas été modifié dans IIS 10.0.
IIS 8.5 L’élément <handlers> n’a pas été modifié dans IIS 8.5.
IIS 8.0 L’élément <handlers> n’a pas été modifié dans IIS 8.0.
IIS 7.5 L’élément <handlers> n’a pas été modifié dans IIS 7.5.
IIS 7.0 L’élément <handlers> a été introduit dans IIS 7.0.
IIS 6.0 N/A

Configuration

L’élément <handlers> est inclus dans l’installation par défaut d’IIS 7.

Procédure

Création d’un mappage de gestionnaire pour un gestionnaire de ASP.NET dans une application IIS 7 s’exécutant en mode intégré

  1. Ouvrez le Gestionnaire iis (Internet Information Services) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, sur Outils, puis sur Gestionnaire des services Internet (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Le Gestionnaire des services Internet (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire des services Internet (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Le Gestionnaire des services Internet (IIS).
  2. Dans le volet Connexions , cliquez sur la connexion de serveur à laquelle vous souhaitez ajouter le module natif.

  3. Dans le volet Accueil , double-cliquez sur Mappages de gestionnaires.
    Capture d’écran du volet Accueil avec la fonctionnalité Mappages de gestionnaires sélectionnée.

  4. Dans le volet Actions , cliquez sur Ajouter un gestionnaire managé...

  5. Dans la boîte de dialogue Ajouter un gestionnaire managé , spécifiez les éléments suivants :

    • Chemin d’accès de la requête. Nom de fichier ou extension de nom de fichier à mapper.

    • Tapez. Nom de type (classe) du gestionnaire managé. Si le gestionnaire est défini dans les dossiers app_code ou bin de l’application, son nom de type apparaît dans la liste déroulante.

    • Nom. Nom descriptif.

      Capture d’écran montrant la boîte de dialogue Ajouter un gestionnaire managé avec des champs pour le chemin de la demande, le type et le nom.

  6. Cliquez sur OK pour fermer la boîte de dialogue Ajouter un gestionnaire managé .

Comment créer un mappage de gestionnaire FastCGI

  1. Ouvrez le Gestionnaire iis (Internet Information Services) :

    • Si vous utilisez Windows Server 2012 ou Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, sur Outils, puis sur Gestionnaire des services Internet (IIS).
    • Si vous utilisez Windows 8 ou Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Le Gestionnaire des services Internet (IIS).
    • Si vous utilisez Windows Server 2008 ou Windows Server 2008 R2 :

      • Dans la barre des tâches, cliquez sur Démarrer, pointez sur Outils d’administration, puis cliquez sur Gestionnaire des services Internet (IIS).
    • Si vous utilisez Windows Vista ou Windows 7 :

      • Dans la barre des tâches, cliquez sur Démarrer, puis sur Panneau de configuration.
      • Double-cliquez sur Outils d’administration, puis double-cliquez sur Le Gestionnaire des services Internet (IIS).
  2. Dans le volet Connexions , cliquez sur le nom du serveur pour lequel vous souhaitez configurer les mappages de gestionnaires FastCGI.

  3. Dans le volet Accueil , double-cliquez sur Mappages de gestionnaires.
    Capture d’écran montrant le volet Accueil du serveur avec la fonctionnalité Mappages de gestionnaires sélectionnée.

  4. Dans le volet Actions , cliquez sur Ajouter un mappage de module...

    Note

    Pour que les étapes suivantes fonctionnent, vous devez avoir déjà installé des fichiers binaires qui exécutent le chemin d’accès du fichier ou l’extension de nom de fichier que vous spécifiez. Cet exemple utilise une implémentation PHP disponible à partir du site Web Microsoft.

  5. Tapez l’extension de nom de fichier, telle as.php dans la zone de chemin de requête , cliquez sur FastCGIModule dans la liste déroulante Module , tapez le chemin du moteur de script (dans cet exemple, PHP-CGI.exe) dans la zone Exécutable , puis cliquez sur OK.
    Capture d’écran de la boîte de dialogue Ajouter un mappage de module avec le module Fast C G I sélectionné dans la liste déroulante Module.

  6. Dans la boîte de dialogue Ajouter un mappage de module , cliquez sur Oui.
    Capture d’écran montrant la boîte de dialogue Ajouter un mappage de module demandant si vous souhaitez créer une application Fast C G I pour l’exécutable.

Paramétrage

L’élément <handlers> contient une collection d’éléments <add> , dont chacun définit un mappage de gestionnaire pour l’application. L’élément <add> contient le nom du gestionnaire, l’extension de nom de fichier ou le masque de chemin d’URL auquel le gestionnaire est mappé, ainsi que le nom du module ou ASP.NET type de gestionnaire HTTP qui spécifie l’implémentation du gestionnaire, entre autres paramètres.

Vous configurez l’élément <handlers> au niveau de l’application dans le fichier Web.config.

Attributes

Caractéristique Descriptif
accessPolicy Attribut d’indicateurs facultatifs.

Spécifie le niveau de types d’accès pour l’ensemble de la collection de gestionnaires.

L’attribut accessPolicy peut être l’une des valeurs possibles suivantes. La valeur par défaut est Read.
Valeur Descriptif
Execute Active les gestionnaires dans la collection de gestionnaires qui nécessitent des droits d’exécution dans des répertoires et des fichiers.
None Désactive tous les gestionnaires de la collection de gestionnaires qui nécessitent l’accès aux répertoires ou aux fichiers.
NoRemoteExecute Empêche les gestionnaires de la collection de gestionnaires d’exécuter des exécutables lorsqu’un gestionnaire reçoit une requête distante.
NoRemoteRead Empêche les gestionnaires de la collection de gestionnaires de lire des fichiers lorsqu’un gestionnaire reçoit une demande distante.
NoRemoteScript Empêche les gestionnaires de la collection de gestionnaires d’exécuter des scripts lorsqu’un gestionnaire reçoit une requête distante.
NoRemoteWrite Empêche les gestionnaires de la collection de gestionnaires de créer ou de modifier des fichiers lorsqu’un gestionnaire reçoit une demande distante.
Read Active les gestionnaires dans la collection de gestionnaires qui nécessitent un accès en lecture aux répertoires et aux fichiers.
Script Active les gestionnaires dans la collection de gestionnaires qui nécessitent des droits de script pour les répertoires ou les fichiers.
Source Active les gestionnaires dans la collection de gestionnaires qui nécessitent un accès en lecture au code source (avec l’indicateur Lecture ) ou un accès en écriture au code source (avec l’indicateur d’écriture ).
Write Active les gestionnaires dans la collection de gestionnaires qui nécessitent un accès en écriture aux répertoires et aux fichiers.

Note

L’attribut accessPolicy n’est pas une stratégie de sécurité applicable, mais plutôt un mécanisme de filtrage qui détermine quels gestionnaires s’exécutent en fonction de leur requiredAccess attribut lorsqu’ils sont configurés. Un gestionnaire filtré fait toujours partie de la configuration et peut être initialisé, même s’il n’est pas sélectionné pour s’exécuter en fonction de cet attribut.

Éléments enfants

Élément Descriptif
add Élément facultatif.

Ajoute un gestionnaire à la collection de gestionnaires.
clear Élément facultatif.

Supprime toutes les références aux gestionnaires de la collection de gestionnaires.
remove Élément facultatif.

Supprime une référence à un gestionnaire de la collection de gestionnaires.

Exemple de configuration

L’exemple suivant contient deux <add> éléments qui définissent des mappages de gestionnaires. Le premier <add> élément définit un gestionnaire SampleHandler pour une application web s’exécutant en mode intégré IIS 7. Si vous ajoutez l’assembly de gestionnaire au répertoire app_code de l’application web, vous n’avez pas besoin d’inclure le nom de l’assembly dans la valeur de l’attribut de type . Le deuxième <add> élément définit un mappage pour les requêtes PHP qui utilisent le module FastCGI.

<handlers>
   <add name="SampleHandler" verb="*" 
      path="SampleHandler.new" 
      type="SampleHandler, SampleHandlerAssembly" 
      resourceType="Unspecified" />
   <add name="PHP-FastCGI" verb="*" 
      path="*.php" 
      modules="FastCgiModule"
      scriptProcessor="c:\php\php-cgi.exe" 
      resourceType="Either" />
</handlers>

Exemple de code

Les exemples suivants ajoutent un mappage FastCGI pour un module PHP, puis ajoutent un gestionnaire sur le site web Contoso qui traite les requêtes PHP.

AppCmd.exe

appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='c:\php\php-cgi.exe']" /commit:apphost

appcmd.exe set config "Contoso" -section:system.webServer/handlers /+"[name='PHP-FastCGI',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='c:\php\php-cgi.exe',resourceType='Either']"

Note

Ce deuxième exemple montre comment ajouter un nouveau mappage de gestionnaire de ASP.NET nommé SampleHandler.new pour une URL spécifique à une application web.

appcmd.exe set config /section:system.webServer/handlers /+[name=SampleHandler',path='SampleHandler.new',verb='*',type='SampleHandler']

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration appHostConfig = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection fastCgiSection = appHostConfig.GetSection("system.webServer/fastCgi");
         ConfigurationElementCollection fastCgiCollection = fastCgiSection.GetCollection();
         ConfigurationElement applicationElement = fastCgiCollection.CreateElement("application");
         applicationElement["fullPath"] = @"c:\php\php-cgi.exe";
         fastCgiCollection.Add(applicationElement);

         Configuration webConfig = serverManager.GetWebConfiguration("Contoso");
         ConfigurationSection handlersSection = webConfig.GetSection("system.webServer/handlers");
         ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
         ConfigurationElement addElement = handlersCollection.CreateElement("add");
         addElement["name"] = @"PHP-FastCGI";
         addElement["path"] = @"*.php";
         addElement["verb"] = @"GET,HEAD,POST";
         addElement["modules"] = @"FastCgiModule";
         addElement["scriptProcessor"] = @"c:\php\php-cgi.exe";
         addElement["resourceType"] = @"Either";
         handlersCollection.AddAt(0, addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim appHostConfig As Configuration = serverManager.GetApplicationHostConfiguration
      Dim fastCgiSection As ConfigurationSection = appHostConfig.GetSection("system.webServer/fastCgi")
      Dim fastCgiCollection As ConfigurationElementCollection = fastCgiSection.GetCollection
      Dim applicationElement As ConfigurationElement = fastCgiCollection.CreateElement("application")
      applicationElement("fullPath") = "c:\php\php-cgi.exe"
      fastCgiCollection.Add(applicationElement)

      Dim webConfig As Configuration = serverManager.GetWebConfiguration("Contoso")
      Dim handlersSection As ConfigurationSection = webConfig.GetSection("system.webServer/handlers")
      Dim handlersCollection As ConfigurationElementCollection = handlersSection.GetCollection
      Dim addElement As ConfigurationElement = handlersCollection.CreateElement("add")
      addElement("name") = "PHP-FastCGI"
      addElement("path") = "*.php"
      addElement("verb") = "GET,HEAD,POST"
      addElement("modules") = "FastCgiModule"
      addElement("scriptProcessor") = "c:\php\php-cgi.exe"
      addElement("resourceType") = "Either"
      handlersCollection.AddAt(0, addElement)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST");
var fastCgiCollection = fastCgiSection.Collection;
var applicationElement = fastCgiCollection.CreateNewElement("application");
applicationElement.Properties.Item("fullPath").Value = "c:\\php\\php-cgi.exe";
fastCgiCollection.AddElement(applicationElement);
adminManager.CommitChanges();

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso";
var handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST/Contoso");
var handlersCollection = handlersSection.Collection;
var addElement = handlersCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "PHP-FastCGI";
addElement.Properties.Item("path").Value = "*.php";
addElement.Properties.Item("verb").Value = "GET,HEAD,POST";
addElement.Properties.Item("modules").Value = "FastCgiModule";
addElement.Properties.Item("scriptProcessor").Value = "c:\\php\\php-cgi.exe";
addElement.Properties.Item("resourceType").Value = "Either";
handlersCollection.AddElement(addElement, 0);
adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST")
Set fastCgiCollection = fastCgiSection.Collection
Set applicationElement = fastCgiCollection.CreateNewElement("application")
applicationElement.Properties.Item("fullPath").Value = "c:\php\php-cgi.exe"
fastCgiCollection.AddElement applicationElement
adminManager.CommitChanges()

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso"
Set handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST/Contoso")
Set handlersCollection = handlersSection.Collection
Set addElement = handlersCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "PHP-FastCGI"
addElement.Properties.Item("path").Value = "*.php"
addElement.Properties.Item("verb").Value = "GET,HEAD,POST"
addElement.Properties.Item("modules").Value = "FastCgiModule"
addElement.Properties.Item("scriptProcessor").Value = "c:\php\php-cgi.exe"
addElement.Properties.Item("resourceType").Value = "Either"
handlersCollection.AddElement addElement, 0
adminManager.CommitChanges()