Создание собственного обработчика 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. Страница настройки соответствий приложения
Рис. 4.3. Страница настройки соответствий расширений
После передачи расширения в фильтр ASP.NET ISAPI нужно добавить обработчик в файл machine.config сервера.
<httpHandlers> <add verb="*" path="*.asbx" type="Microsoft.asbxHandler" / > </httpHandlers>
Теперь все запросы с расширением .asbx будут обрабатываться собственным обработчиком. Чтобы дать вам лучшее представление обо всем процессе, приведу пошаговое описание короткой жизни HTTP-запроса.
- Пользователь запрашивает веб-страницу с веб-сервера.
- Запрос обрабатывается в IIS и направляется в расширение ISAPI ASP.NET.
- ASP.NET получает запрос и пропускает его через несколько модулей HTTP. (Далее я их опишу.)
- После того как запрос прошел через эти модули HTTP, он отправляется в собственный обработчик.
- Вызывается метод ProcessRequest обработчика, и пользователю отправляется ответ.
Этот процесс происходит каждый раз, когда запрашиваемый ресурс соответствует одному из зарегистрированных обработчиков.