Обработчики обработчиков <>

Обзор

Элемент <handlers> определяет обработчики, зарегистрированные для определенного расширения имени файла или URL-адреса.

Обработчики — это компоненты СЛУЖБ IIS, настроенные для обработки запросов к определенному содержимому, как правило, для создания ответа для ресурса запроса. Например, веб-страница ASP.NET является одним из типов обработчика. Обработчики можно использовать для обработки запросов к любому ресурсу, который должен возвращать сведения пользователям, которые не являются статическим файлом. СЛУЖБЫ IIS предоставляют несколько различных типов обработчиков для поддержки статических файлов, приложений CGI, приложений FastCGI и расширений API ISAPI. ASP.NET также обеспечивает поддержку дополнительных типов обработчиков через интерфейс обработчика HTTP.

Разработчики могут создавать пользовательские обработчики для выполнения специальной обработки, которую можно определить с помощью расширений имен файлов в приложении. Например, если разработчик создал обработчик, создавший ФОРМАТ RSS XML, можно привязать расширение имени файла .rss в приложении к пользовательскому обработчику. Разработчики также могут создавать обработчики, которые сопоставляют с определенным файлом и могут реализовать эти обработчики как собственные модули или как реализации интерфейса IHttpHandler ASP.NET.

Compatibility

Версия Примечания.
IIS 10.0 Элемент <handlers> не был изменен в IIS 10.0.
IIS 8.5 Элемент <handlers> не был изменен в IIS 8.5.
IIS 8.0 Элемент <handlers> не был изменен в IIS 8.0.
IIS 7.5 Элемент <handlers> не был изменен в IIS 7.5.
IIS 7.0 Элемент <handlers> появился в IIS 7.0.
IIS 6.0 N/A

Настройка

Элемент <handlers> включен в установку IIS 7 по умолчанию.

Как сделать

Создание сопоставления обработчика для обработчика ASP.NET в приложении IIS 7, работающем в интегрированном режиме

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер серверов, щелкните "Сервис" и выберите диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживайте клавишу Windows , нажимайте букву X, а затем нажмите кнопку "Панель управления".
      • Щелкните "Администрирование" и дважды щелкните диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку "Пуск", наведите указатель на администрирование и выберите диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку "Пуск" и нажмите кнопку "Панель управления".
      • Дважды щелкните " Администрирование" и дважды щелкните диспетчер служб IIS.
  2. В области "Подключения" щелкните подключение к серверу, к которому нужно добавить собственный модуль.

  3. На панели "Главная" дважды щелкните сопоставления обработчиков.
    Снимок экрана: панель

  4. На панели "Действия" нажмите кнопку "Добавить управляемый обработчик" ...

  5. В диалоговом окне "Добавление управляемого обработчика" укажите следующее:

    • Путь запроса. Имя файла или расширение имени файла для сопоставления.

    • Type. Имя типа (класса) управляемого обработчика. Если обработчик определен в app_code или папках bin приложения, его имя типа появится в раскрывающемся списке.

    • Имя. Описательное имя.

      Снимок экрана: диалоговое окно

  6. Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно "Добавить управляемый обработчик ".

Создание сопоставления обработчика FastCGI

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер серверов, щелкните "Сервис" и выберите диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживайте клавишу Windows , нажимайте букву X, а затем нажмите кнопку "Панель управления".
      • Щелкните "Администрирование" и дважды щелкните диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку "Пуск", наведите указатель на администрирование и выберите диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку "Пуск" и нажмите кнопку "Панель управления".
      • Дважды щелкните " Администрирование" и дважды щелкните диспетчер служб IIS.
  2. В области "Подключения" щелкните имя сервера, для которого необходимо настроить сопоставления обработчиков FastCGI.

  3. На панели "Главная" дважды щелкните сопоставления обработчиков.
    Снимок экрана: панель

  4. В области "Действия" нажмите кнопку "Добавить сопоставление модулей" ...

    Замечание

    Чтобы выполнить следующие действия, необходимо уже установить двоичные файлы, которые будут выполнять указанный путь к файлу или расширение имени файла. В этом примере используется реализация PHP, доступная на веб-сайте Майкрософт.

  5. Введите расширение имени файла, например as.php в поле пути запроса , щелкните FastCGIModule в раскрывающемся списке модуля , введите путь к обработчику сценариев (в этом примере PHP-CGI.exe) в поле исполняемого файла и нажмите кнопку "ОК".
    Снимок экрана: диалоговое окно

  6. В диалоговом окне "Добавление сопоставления модулей " нажмите кнопку "Да".
    Снимок экрана: диалоговое окно

Конфигурация

Элемент <handlers> содержит коллекцию <add> элементов, каждый из которых определяет сопоставление обработчика для приложения. Элемент <add> содержит имя обработчика, расширение имени файла или маску пути URL-адреса, с которым сопоставлен обработчик, а также имя модуля ASP.NET или тип обработчика HTTP, указывающий реализацию обработчика, среди других параметров.

Элемент на уровне приложения настраивается <handlers> в файле Web.config.

Attributes

Свойство Description
accessPolicy Необязательный атрибут флагов.

Указывает уровень доступа для всей коллекции обработчиков.

Атрибут accessPolicy может быть одним из следующих возможных значений. Значение по умолчанию — Read.
Ценность Description
Execute Включает обработчики в коллекции обработчиков, для которых требуются права выполнения в каталогах и файлах.
None Отключает все обработчики в коллекции обработчиков, требующих доступа к каталогам или файлам.
NoRemoteExecute Запрещает обработчикам в коллекции обработчиков запускать исполняемые файлы при получении удаленного запроса обработчиком.
NoRemoteRead Запрещает обработчикам коллекции обработчиков считывать файлы, когда обработчик получает удаленный запрос.
NoRemoteScript Запрещает обработчикам в коллекции обработчиков запускать скрипты при получении удаленного запроса обработчиком.
NoRemoteWrite Запрещает обработчикам коллекции обработчиков создавать или изменять файлы при получении удаленного запроса обработчиком.
Read Включает обработчики в коллекции обработчиков, для которых требуется доступ на чтение к каталогам и файлам.
Script Включает обработчики в коллекции обработчиков, для которых требуются права скрипта для каталогов или файлов.
Source Включает обработчики в коллекции обработчиков, для которых требуется доступ на чтение к исходному коду (вместе с флагом чтения ) или доступ на запись к исходному коду (вместе с флагом записи ).
Write Включает обработчики в коллекции обработчиков, для которых требуется доступ на запись к каталогам и файлам.

Замечание

Атрибут accessPolicy не является принудительной политикой безопасности, а механизмом фильтрации, который определяет, какие обработчики выполняются на основе их requiredAccess атрибута при настройке. Отфильтрованный обработчик по-прежнему является частью конфигурации и может быть инициализирован, даже если он не будет выбран для выполнения на основе этого атрибута.

Дочерние элементы

Элемент Description
add Необязательный элемент.

Добавляет обработчик в коллекцию обработчиков.
clear Необязательный элемент.

Удаляет все ссылки на обработчики из коллекции обработчиков.
remove Необязательный элемент.

Удаляет ссылку на обработчик из коллекции обработчиков.

Пример конфигурации

В следующем примере содержатся два <add> элемента, определяющие сопоставления обработчиков. Первый <add> элемент определяет обработчик SampleHandler для веб-приложения, работающего в интегрированном режиме IIS 7. Если добавить сборку обработчика в каталог app_code веб-приложения, вам не нужно включать имя сборки в значение атрибута типа . Второй <add> элемент определяет сопоставление запросов PHP, использующих модуль 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>

Пример кода

В следующих примерах добавляется сопоставление FastCGI для модуля PHP, а затем добавьте обработчик на веб-сайте Contoso, который будет обрабатывать запросы 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']"

Замечание

Во втором примере показано, как добавить новое сопоставление обработчика ASP.NET с именем SampleHandler.new для определенного URL-адреса в веб-приложение.

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()