Добавление обработчиков <>

Обзор

Элемент <add><handlers> коллекции добавляет обработчик в список обработчиков HTTP для служб IIS 7.

Compatibility

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

Настройка

Элемент <add><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. На панели "Главная" дважды щелкните сопоставления обработчиков.
    Снимок экрана: диспетчер I S Manager, на котором отображается домашняя страница веб-сайта по умолчанию. Выделен значок сопоставления обработчика.

  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. На панели "Главная" дважды щелкните сопоставления обработчиков.
    Снимок экрана: окно I S Manager, отображающее домашнюю страницу сервера. Выделен значок сопоставления обработчиков.

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

    Замечание

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

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

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

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

Attributes

Свойство Description
allowPathInfo Дополнительный логический атрибут.

Указывает, обрабатывает ли обработчик полный путь в URI, например contoso/marketing/imageGallery.aspx. Если значение равно true, обработчик обрабатывает полный путь, contoso/marketing/imageGallery. Если значение равно false, обработчик обрабатывает только последний раздел пути /imageGallery.

Значение по умолчанию — false.
modules Необязательный строковый атрибут.

Указывает имя модуля или модулей, с которым нужно сопоставить имя файла или имя файла с расширением. Если указать несколько значений, разделите значения запятыми (,).

Значение по умолчанию — ManagedPipelineHandler.
name Обязательный строковый атрибут.

Задает уникальное имя сопоставления обработчика.
path Обязательный строковый атрибут.

Указывает имя файла или расширение имени файла, для которого применяется сопоставление обработчика.
preCondition Необязательный строковый атрибут.

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

Атрибут preCondition может быть одним или несколькими из следующих возможных значений. Если указать несколько значений, разделите значения запятыми (,).
Ценность Description
bitness32 Укажите значение bitness32 , если обработчик является 32-разрядным файлом .dll, а СЛУЖБЫ IIS должны загружать обработчик только для рабочих процессов, которые выполняются в режиме WOW64 (32-разрядное моделирование) в 64-разрядной операционной системе.
bitness64 Укажите значение bitness64 , если обработчик является 64-разрядным файлом .dll, а СЛУЖБЫ IIS должны загружать обработчик только для рабочих процессов, выполняемых в 64-разрядном режиме.
integratedMode Укажите значение integratedMode , когда обработчик должен отвечать только на запросы в пулах приложений, настроенных для использования конвейера интегрированной обработки запросов.
ISAPIMode Укажите значение ISAPIMode , когда обработчик должен отвечать только на запросы в пулах приложений, настроенных для использования классического режима.
runtimeVersionv1.1 Укажите значение runtimeVersionv1.1 , когда обработчик должен отвечать только на запросы в пулах приложений, настроенных для использования .NET Framework версии 1.1.
runtimeVersionv2.0 Укажите значение runtimeVersionv2.0 , когда обработчик должен отвечать только на запросы в пулах приложений, настроенных для использования .NET Framework версии 2.0.
requireAccess Необязательный атрибут перечисления.

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

Атрибут requireAccess может быть одним или несколькими из следующих возможных значений. Если указать несколько значений, разделите значения запятыми (,). Значение по умолчанию — Script.

Примечание: Даже если значение requireAccess обработчика не соответствует текущему accessPolicy уровню, оно остается частью настроенного набора обработчиков и может быть инициализировано, хотя оно не будет выполнено.
Ценность Description
Execute Указывает, что обработчику требуются права на выполнение исполняемых файлов.

Числовое значение равно 4.
Нет Указывает, что обработчик не имеет требований к доступу.

Числовое значение равно 0.
Прочитайте Указывает, что обработчику требуются разрешения на чтение.

Числовое значение равно 1.
Скрипт Указывает, что обработчику требуются права на выполнение скриптов.

Числовое значение равно 3.
Написать Указывает, что обработчику требуются разрешения на запись.

Числовое значение равно 2.
resourceType Необязательный строковый атрибут.

Указывает тип ресурса, к которому применяется сопоставление обработчика.

Атрибут resourceType может быть одним из следующих возможных значений. Значение по умолчанию — Unspecified.
Ценность Description
Directory Указывает, что сопоставление обработчика применяется только к запросам только для физических папок на диске.

Числовое значение равно 1.
Either Указывает, что сопоставление обработчика применяется к запросам физических файлов или папок на диске.

Числовое значение равно 2.
File Указывает, что сопоставление обработчика применяется только к запросам только для физических файлов на диске.

Числовое значение равно 0.
Unspecified Указывает, что тип сопоставления не указан. Сопоставление обработчика применяется к запросам независимо от того, сопоставляется ли запрос с физическим файлом или папкой на диске. Используйте этот параметр при сопоставлении обработчика с расширением имени файла или файла, которое не существует на диске, например MyHandler.axd.

Числовое значение равно 3.
responseBufferLimit Необязательный атрибут uint.

Задает максимальный размер буфера ответа в байтах для обработчика запросов.

Значение по умолчанию — 4194304 байт.
scriptProcessor Необязательный строковый атрибут.

Указывает физический путь к файлу .dll расширения ISAPI или файлу C .exe GI, который обрабатывает запрос.

Атрибут scriptProcessor требуется только для сопоставлений обработчиков карт скриптов. При сопоставлении обработчика с расширением ISAPI необходимо указать ISAPIModule для атрибута модулей. При сопоставлении обработчика с файлом CGI необходимо указать CGIModule для атрибута модулей.
type Необязательный строковый атрибут.

Указывает путь к пространству имен управляемого обработчика. Атрибут типа требуется только для управляемых обработчиков.
verb Обязательный строковый атрибут.

Указывает HTTP-команды, для которых применяется сопоставление обработчика.

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

Нет.

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

В следующем примере содержатся два <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()