Condividi tramite


Gestori gestori <>

Panoramica

L'elemento <handlers> definisce i gestori registrati per un'estensione o un URL di file specifici.

I gestori sono componenti iis (Internet Information Services) configurati per elaborare le richieste a contenuto specifico, in genere per generare una risposta per la risorsa di richiesta. Ad esempio, una pagina Web ASP.NET è un tipo di gestore. È possibile usare i gestori per elaborare le richieste a qualsiasi risorsa che deve restituire informazioni agli utenti che non sono un file statico. IIS offre diversi tipi di gestore per supportare file statici, applicazioni CGI (Common Gateway Interface), applicazioni FastCGI e estensioni ISAPI (Internet Server API). ASP.NET fornisce anche il supporto per altri tipi di gestore tramite l'interfaccia del gestore HTTP.

Gli sviluppatori possono creare gestori personalizzati per eseguire una gestione speciale che è possibile identificare usando le estensioni di file nell'applicazione. Ad esempio, se uno sviluppatore ha creato un gestore che ha creato codice XML in formato RSS, è possibile associare l'estensione del nome file RSS nell'applicazione al gestore personalizzato. Gli sviluppatori possono anche creare gestori che eseguono il mapping a un file specifico e possono implementare questi gestori come moduli nativi o come implementazioni dell'interfaccia ASP.NET IHttpHandler .

Compatibilità

Versione Note
IIS 10.0 L'elemento <handlers> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <handlers> non è stato modificato in IIS 8.5.
IIS 8,0 L'elemento <handlers> non è stato modificato in IIS 8.0.
IIS 7,5 L'elemento <handlers> non è stato modificato in IIS 7.5.
IIS 7.0 L'elemento <handlers> è stato introdotto in IIS 7.0.
IIS 6.0 N/D

Installazione

L'elemento <handlers> è incluso nell'installazione predefinita di IIS 7.

Procedure

Come creare un mapping di un gestore per un gestore ASP.NET in un'applicazione IIS 7 in esecuzione in modalità integrata

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni fare clic sulla connessione server a cui si vuole aggiungere il modulo nativo.

  3. Nel riquadro Home fare doppio clic su Mapping gestore.
    Screenshot del riquadro Home con la funzionalità Mapping dei gestori selezionata.

  4. Nel riquadro Azioni fare clic su Aggiungi gestore gestito...

  5. Nella finestra di dialogo Aggiungi gestore gestito specificare quanto segue:

    • Percorso richiesta. Nome file o estensione del nome file di cui eseguire il mapping.

    • Type. Nome del tipo (classe) del gestore gestito. Se il gestore è definito nelle cartelle app_code o bin dell'applicazione, il nome del tipo verrà visualizzato nell'elenco a discesa.

    • Nome. Nome descrittivo.

      Screenshot che mostra la finestra di dialogo Aggiungi gestore gestito con campi per Percorso richiesta, Tipo e Nome.

  6. Fare clic su OK per chiudere la finestra di dialogo Aggiungi gestore gestito .

Come creare un mapping del gestore FastCGI

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni fare clic sul nome del server per cui si desidera configurare i mapping dei gestori FastCGI.

  3. Nel riquadro Home fare doppio clic su Mapping gestore.
    Screenshot che mostra il riquadro Home server con la funzionalità Mapping gestore selezionata.

  4. Nel riquadro Azioni fare clic su Aggiungi mapping moduli...

    Nota

    Per il corretto funzionamento dei passaggi successivi, è necessario avere già installato file binari che eseguiranno il percorso del file o l'estensione del nome file specificata. Questo esempio usa un'implementazione PHP disponibile nel sito Web Microsoft.

  5. Digitare l'estensione del nome file, ad esempio .php nella casella Percorso richiesta , fare clic su FastCGIModule nell'elenco a discesa Modulo , digitare il percorso del motore di scripting (in questo esempio PHP-CGI.exe) nella casella Eseguibile e quindi fare clic su OK.
    Screenshot della finestra di dialogo Aggiungi mapping moduli con Fast C G I Module selezionato nell'elenco a discesa Modulo.

  6. Nella finestra di dialogo Aggiungi mapping moduli fare clic su .
    Screenshot che mostra la finestra di dialogo Aggiungi mapping moduli che chiede se si vuole creare un'applicazione Fast C G I per l'eseguibile.

Configurazione

L'elemento <handlers> contiene una raccolta di <add> elementi, ognuno dei quali definisce un mapping del gestore per l'applicazione. L'elemento <add> contiene il nome del gestore, l'estensione del file o la maschera percorso URL a cui è mappato il gestore e il nome del modulo o ASP.NET tipo di gestore HTTP che specifica l'implementazione del gestore, tra le altre impostazioni.

L'elemento viene <handlers> configurato a livello di applicazione nel file Web.config.

Attributi

Attributo Descrizione
accessPolicy Attributo flag facoltativo.

Specifica i tipi di accesso consentiti per l'intera raccolta di gestori.

L'attributo accessPolicy può essere uno dei valori possibili seguenti. Il valore predefinito è Read.
Valore Descrizione
Execute Abilita i gestori nella raccolta di gestori che richiedono diritti di esecuzione in directory e file.
None Disabilita tutti i gestori nella raccolta di gestori che richiedono l'accesso a directory o file.
NoRemoteExecute Impedisce ai gestori nella raccolta di gestori di eseguire eseguibili quando un gestore riceve una richiesta remota.
NoRemoteRead Impedisce ai gestori nella raccolta di gestori di leggere i file quando un gestore riceve una richiesta remota.
NoRemoteScript Impedisce ai gestori nella raccolta di gestori di eseguire script quando un gestore riceve una richiesta remota.
NoRemoteWrite Impedisce ai gestori nella raccolta di gestori di creare o modificare file quando un gestore riceve una richiesta remota.
Read Abilita i gestori nella raccolta di gestori che richiedono l'accesso in lettura alle directory e ai file.
Script Abilita i gestori nella raccolta di gestori che richiedono diritti di script per directory o file.
Source Abilita i gestori nella raccolta di gestori che richiedono l'accesso in lettura al codice sorgente (insieme al flag lettura ) o l'accesso in scrittura al codice sorgente (insieme al flag Di scrittura ).
Write Abilita i gestori nella raccolta di gestori che richiedono l'accesso in scrittura a directory e file.

Elementi figlio

Elemento Descrizione
add Elemento facoltativo.

Aggiunge un gestore alla raccolta di gestori.
clear Elemento facoltativo.

Rimuove tutti i riferimenti ai gestori dall'insieme dei gestori.
remove Elemento facoltativo.

Rimuove un riferimento a un gestore dalla raccolta dei gestori.

Esempio di configurazione

L'esempio seguente contiene due <add> elementi che definiscono i mapping dei gestori. Il primo <add> elemento definisce un gestore SampleHandler per un'applicazione Web in esecuzione in modalità integrata IIS 7. Se si aggiunge l'assembly del gestore alla directory app_code per l'applicazione Web, non è necessario includere il nome dell'assembly nel valore per l'attributo type . Il secondo <add> elemento definisce un mapping per le richieste PHP che usano il modulo 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>

Codice di esempio

Gli esempi seguenti aggiungono un mapping FastCGI per un modulo PHP, quindi aggiungere un gestore nel sito Web Contoso che elaborerà le richieste 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']"

Nota

Questo secondo esempio illustra come aggiungere un nuovo mapping del gestore ASP.NET denominato SampleHandler.new per un URL specifico a un'applicazione 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()