Расширение встроенного конвейера IIS

158

В IIS 8 реализованы два режима обработки запросов. Первый, называемый классическим (Classic), представляет собой модель, которая используется более ранними версиями и в настоящее время поддерживается для унаследованных приложений. Второй режим, называемый встроенным (Integrated), обеспечивает более высокую производительность и предоставляет другую модель расширения IIS 8 посредством интерфейса IHttpHandler. Встроенный режим конвейера должен применяться по умолчанию. В этой статье будет показано, как встроенный конвейер HTTP можно расширить с помощью того же самого обработчика, который был создан в статье «Расширение конвейера HTTP».

Создание обработчика

Для простоты мы создали проект Visual Studio, который содержит только класс SimpleHandler, построенный ранее. Чтобы создать обработчик с нуля, последовательно выберите пункты New (Создать), а затем Project (Проект) из меню File (Файл) в Visual Studio. Затем укажите вариант Class Library (Библиотека класса). Назначьте проекту имя SimpleHandler. Переименуйте файл кода C# на SimplerHandler.cs и вставьте в него код, приведенный ниже. Функционирование этого кода подробно объяснялось в статье, ссылка на которую дана выше:

using System;
using System.Web;

public class SimpleHandler : IHttpHandler
{
    public void ProcessRequest(System.Web.HttpContext context)
    {
        HttpResponse response = context.Response;
        response.Write("<html><body><h1>Файл обработан SimpleHandler");
        response.Write("</h1></body></html>");
    }

    public bool IsReusable
    {
        get { return true; }
    }
}

В меню Build (Сборка) выберите пункт Build Solution (Построить решение), чтобы скомпилировать код и создать файл DLL.

Развертывание обработчика

Найдите файл DLL, созданный Visual Studio. Он будет помещен в каталог bin\Debug или bin\Release проекта и будет называться SimpleHandler.dll. Скопируйте этот файл на сервер, поместив его в каталог bin в корневом каталоге приложения. Если каталог bin не существует, создайте его. Например, если обработчик должен применяться к приложению FileCopy, которое было ранее развернуто, файл DLL необходимо поместить в каталог C:\inetpub\wwwroot\WebsiteDeployment\FileCopy\bin.

Конфигурирование обработчика

Используя IIS Manager, выберите приложение, которое требуется изменить. В моем случае им будет ранее развернутое приложение TestAspNet расположенное в виртуальном каталоге с псевдонимом virtual. Дважды щелкните на значке Handler Mappings (Сопоставления обработчика), чтобы открыть итоговый экран Handler Mappings (Сопоставления обработчиков), показанный на рисунке ниже:

Итоговый экран Handler Mappings

Щелкните на действии Add Managed Handler (Добавить управляемый обработчик) в правой части окна, чтобы открыть диалоговое окно Add Managed Handler (Добавление управляемого обработчика), показанное на рисунке ниже. В поле Request Path (Путь запроса) укажите запросы, которые будет обслуживать обработчик. В примере требуется, чтобы наш простой обработчик использовался только для запросов, которые заканчиваются расширением .htest. В поле Type (Тип) введите имя класса обработчика. Если для данного класса используется пространство имен, его также нужно включить в это поле:

Диалоговое окно Add Managed Handler

В поле Name (Имя) введите имя, которое можно будет распознать на странице сведений обработчика. В примере обработчик получил имя SimpleHandler. Щелкнув на кнопке Request Restrictions (Ограничение запроса), можно сконфигурировать дополнительные параметры, но для данного простого обработчика они не требуются. Щелкните на кнопке OK чтобы создать сопоставление обработчика.

Тестирование обработчика

Чтобы протестировать обработчик, запросите URL-адрес, который заканчивается строкой .htest и обслуживается вашим приложением. Я использовал следующий адрес:

http://professorweb:8090/virtual/help.htest

При открытии этого URL-адреса в браузере отобразятся показанные на рисунке ниже результаты, подтверждая, что обработчик встроенного конвейера корректно установлен и работает:

Тестирование обработчика встроенного конвейера
Пройди тесты
Лучший чат для C# программистов