Два перехватчика: HttpModule и HttpHandlers - Шаги реализации HttpHandlers, HttpModule

ОГЛАВЛЕНИЕ

Шаги реализации HttpHandlers

Шаг 1

HttpHandlers являются классами, реализующими логику предварительной обработки. Поэтому сначала надо создать проект класса и сослаться на пространство имен System.Web и реализовать интерфейс IHttpHandler, как показано во фрагменте кода ниже. Интерфейс IHttpHandler имеет два метода, требующих реализации; один – ProcessRequest, а второй - IsResuable. В методе ProcessRequest URL вводится в файл и отображается в браузере. Был обработан объект ответа контекста, чтобы отправить вывод браузеру.

using System;
using System.Web;
using System.IO;
namespace MyPipeLine
{
public class clsMyHandler : IHttpHandler
{
public void ProcessRequest(System.Web.HttpContext context)
{
context.Response.Write("The page request is " + context.Request.RawUrl.ToString());
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("Page requested at " + DateTime.Now.ToString() +
            context.Request.RawUrl); sw.Close();
}
public bool IsReusable
{
get
{
return true;
}
}
}

Шаг 2

На шаге 2 надо сделать запись тега HttpHandlers. В теге надо указать, какой вид запрошенного расширения вызовет класс.

<system.web>
<httpHandlers>
<add verb="*" path="*.Shiv,*.Koirala" type="MyPipeLine.clsMyHandler, MyPipeLine"/>
</httpHandlers>
</system.web>

Сделав все, запросите имя страницы с расширением ‘Shiv’ и увидите показанный ниже вывод. Когда IIS видит, что запрос предназначен для расширения страницы ‘.shiv’, он вызывает логику предварительной обработки класса clsMyHandler.

Шаги реализации HttpModule

Шаг 1

Как сказано ранее, HttpModule является препроцессором события. Поэтому сначала надо реализовать IHttpModule и зарегистрировать необходимые события, на которые этот модуль должен подписаться. В примере зарегистрировались в событиях BeginRequest и EndRequest. В этих событиях запись заносится в файл журнала.

public class clsMyModule : IHttpModule
{
public clsMyModule()
{}
public void Init(HttpApplication objApplication)
{
// зарегистрировать обработчик события канала
objApplication.BeginRequest += new EventHandler(this.context_BeginRequest);
objApplication.EndRequest += new EventHandler(this.context_EndRequest);
}
public void Dispose()
{
}
public void context_EndRequest(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("End Request called at " + DateTime.Now.ToString()); sw.Close();
}
public void context_BeginRequest(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("Begin request called at " + DateTime.Now.ToString()); sw.Close();
}
}

Шаг 2

Надо внести эти записи модуля в тег HttpModule, как показано во фрагменте кода ниже:

<httpModules>
<add name="clsMyModule" type="MyPipeLine.clsMyModule, MyPipeLine"/>
</httpModules>

Итоговый вывод

При выполнении кода в RequestLog.txt должно появиться нечто вроде следующего. Вышеприведенный пример непрактичен, но помогает понять основы.

Begin request called at 11/12/2008 6:32:00 PM
End Request called at 11/12/2008 6:32:00 PM
Begin request called at 11/12/2008 6:32:03 PM
End Request called at 11/12/2008 6:32:03 PM
Begin request called at 11/12/2008 6:32:06 PM
End Request called at 11/12/2008 6:32:06 PM
Begin request called at 11/12/2008 8:36:04 PM
End Request called at 11/12/2008 8:36:04 PM
Begin request called at 11/12/2008 8:37:06 PM
End Request called at 11/12/2008 8:37:06 PM
Begin request called at 11/12/2008 8:37:09 PM
End Request called at 11/12/2008 8:37:09 PM
Begin request called at 11/12/2008 8:37:38 PM
Page requested at 11/12/2008 8:37:38 PM/WebSiteHandlerDemo/Articles.shiv
End Request called at 11/12/2008 8:37:38 PM
Читайте также:
  • Взаимодействие Flex с веб-службой ASP.NET
    •    Скачать исходники - 3.45 Кб•    Скачать тест - 1.08 Кб Помните, что веб-служба – всего лишь средство. Есть много других средств вроде HTTPService, дистанционная связь Flex и т. д. Справка В статье Flex HTTPService с ASP.NET на CodeProject показано использование тега flex <mx:HTTPServi...
  • Изучение кэширования в ASP.NET
    Введение Большее число клиентов означает большее число запросов к веб-серверу и тяжелую нагрузку на сеть, вызывающую падение производительности. Для решения этой проблемы было применено кэширование в веб-приложении. Большинство описанных в статье вещей известно многим читателям, но статья была на...
  • Повышение производительности веб-сайта ASP.NET
    Если веб-приложение, вызывающее много служб и загружающее много данных на каждой странице с множеством фоновых вычислений из базы данных, тормозит - то надо сделать: 1. Сжатие HTTP Сжатие HTTP сжимает содержимое страницы на сервере. Оно сжимает запросы и ответы HTTP, что значительно повышает про...
  • Веб-формы ASP.NET и ASP.NET MVC в ладу друг с другом
    •    Скачать исходники - 442 KB Снимки экрана Простая демонстрация в действии. Первый снимок экрана обслуживается из классической веб-формы с URL: http://localhost:41650/Src/ClassicWebforms/Home.aspx. Второй обслуживается из приложения MVC действием "индекс контроллера «главная страница". URL: ...
  • Доступная производственная архитектура программного обеспечения как услуги на базе ASP.NET и SQL Server
    Введение Имеется популярный продукт ASP.NET+SQL Server, растущий со скоростью тысяча пользователей в день, и достигнут предел возможностей вашего собственного хостинга. Теперь, имея достаточно денег в кармане, вы планируете переехать на сторонний хостинг, возможно, на совместное размещение или на...