Конфигурирование и настройка Microsoft ASP.NET

       

Создание собственного обработчика HTTP


ASP.NET облегчает создание собственных обработчиков HTTP, которые могут обрабатывать запросы для собственных расширений файлов или путей файлов. В этом разделе вы научитесь создавать простой обработчик HTTP и поставите его в соответствие новому расширению .asbx. Имеется три типа обработчиков HTTP: синхронные, асинхронные и фабрики обработчиков. Синхронный обработчик обрабатывает весь запрос перед отправкой результатов пользователю. Асинхронный обработчик обрабатывает длинные запросы и позволяет отправлять информацию к пользователю на различных этапах обработки запроса. Фабрика обработчиков HTTP генерирует несколько обработчиков в зависимости от запроса. Файлы .aspx обрабатываются обработчиком из фабрики обработчиков HTTP, так что каждый запрос может быть передан в класс страницы для каждого файла. Класс страницы реализует интерфейс IHttpHandler и является обработчиком для каждой страницы.

Собственный обработчик HTTP – это класс .NET, который реализует либо интерфейс IHttpHandler, либо интерфейс IHttpAsyncHandler. Первым шагом при создании обработчика является объявление обработчика и реализации его интерфейса.

C#

using System.Web; public class asbxHandler : IHttpHandler { }

VB.NET

Imports System.Web Public Class asbxHandler Implements IHttpHandler End Class

При реализации интерфейса IHttpHandler следует включить метод ProcessRequest и свойство IsReusable. Если запрос HTTP связан с обработчиком HTTP, он вызывает метод ProcessRequest и передает в него текущий контекст HTTP. Затем можно использовать объект контекста HTTP либо для чтения из запроса, либо для записи ответа.

C#

using System.Web; public class asbxHandler : IHttpHandler { public void ProcessRequest(HttpContext currentContext) { HttpResponse currentResponse = currentContext.Response; currentResponse.Write("<html><body>"); currentResponse.Write("You have accessed an .asbx file"); currentResponse.Write("</body></html>"); } }

VB.NET

Imports System.Web Public Class asbxHandler Implements IHttpHandler Public Sub ProcessRequest(ByVal currentContext as HttpContext) _ Implements IHttpHandler Dim currentResponse As HttpResponse = currentContext.Response currentResponse.Write("<html><body>") currentResponse.Write("You have accessed an .asbx file") currentResponse.Write("</body></html>") End Sub End Class


Это очень простой метод ProcessRequest – он просто записывает через текущий контекст HTTP с помощью популярного метода Write короткое сообщение для пользователя. Когда пользователь пытается получить доступ к файлу .asbx, расположенному на сервере, вызывается этот обработчик, который отправляет пользователю простое сообщение. Прежде чем обработчик начнет работать, следует реализовать свойство IsReusable. Оно определяет, будет ли обработчик сохраняться в памяти для повторного использования или будет удаляться и воссоздаваться при последующем обращении к нему. Ниже приведен код, который требуется для реализации свойства IsReusable.

C#

using System.Web; public class asbxHandler : IHttpHandler { public bool IsReusable { get{return false;} } }

VB.NET

Imports System.Web Public Class asbxHandler Implements IHttpHandler Public ReadOnly Property IsReusable() As Boolean Implements _ IHttpHandler.IsReusable Get Return False End Get End Property End Class

Возвращение значения false означает, что обработчики не сохраняются в памяти, а вместо этого удаляются после обработки запроса. Обработчик готов, но вам требуется зарегистрировать его в настроечном файле; также следует зарегистрировать расширение в IIS.



Рис. 4.2.  Страница настройки соответствий приложения

  • Чтобы добавить в список соответствий новое расширение, щелкните на кнопке Add (Добавить). Появится окно (рис. 4.3).


    Рис. 4.3.  Страница настройки соответствий расширений

  • Установите путь к файлу .dll ASP.NET ISAPI, который находится в папке <drive>:\%windir%\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
  • В поле Extension (Расширение) введите .asbx и нажмите OK.


  • После передачи расширения в фильтр ASP.NET ISAPI нужно добавить обработчик в файл machine.config сервера.

    <httpHandlers> <add verb="*" path="*.asbx" type="Microsoft.asbxHandler" / > </httpHandlers>

    Теперь все запросы с расширением .asbx будут обрабатываться собственным обработчиком. Чтобы дать вам лучшее представление обо всем процессе, приведу пошаговое описание короткой жизни HTTP-запроса.

    1. Пользователь запрашивает веб-страницу с веб-сервера.
    2. Запрос обрабатывается в IIS и направляется в расширение ISAPI ASP.NET.
    3. ASP.NET получает запрос и пропускает его через несколько модулей HTTP. (Далее я их опишу.)
    4. После того как запрос прошел через эти модули HTTP, он отправляется в собственный обработчик.
    5. Вызывается метод ProcessRequest обработчика, и пользователю отправляется ответ.


    Этот процесс происходит каждый раз, когда запрашиваемый ресурс соответствует одному из зарегистрированных обработчиков.


    Содержание раздела