Спонсор: Microsoft
Опубликован: 30.01.2013 | Доступ: свободный | Студентов: 1182 / 138 | Длительность: 17:23:00
Теги: .net, ajax, asp, www, интранет
Лекция 7:

Возможности расширения приложений ASP.NET

Аннотация: Эта лекция содержит информацию о способах расширения приложений ASP.NET. Используя знания, полученные в данной лекции можно более гибко и удобно расширять возможности приложения и гибко управлять его инфраструктурой.

Модули HTTP

Модель разработки ASP.NET позволяет разработчику расширять структуру приложения за счет использования различных механизмов расширения. Одним из наиболее важных механизмов расширения являются HTTP-модули.

HTTP-модули – это объекты, которые загружаются в процессе работы приложения и позволяют запускать программный код на различных стадиях обработки запроса HTTP. При инициализации HTTP-модуля производится подписка на необходимые события модели событий ASP.NET, которые выполняются на соответствующих этапах жизненного цикла страницы. Если рассмотреть структуру среды выполнения с точки зрения загрузки программных компонентов расширения, то можно увидеть следующую картину.


В момент поступления запроса поочередно инициализируются все HTTP-модули, определенные в конфигурации приложения, в которых производится подписка на нужные события. После этого создается HTTP-обработчик (работа которого будет рассмотрена далее) и управление передается ему.

HTTP-модули могут использоваться как в приложениях ASP.NET Web Forms, так и в приложениях ASP.NET MVC Framework. Они встраиваются в цепочку обработки запроса веб-сервера Internet Information Services (IIS), в рамках которого работают все приложения ASP.NET.

Каждый HTTP-модуль является объектом .NET Framework, который реализует интерфейс IHttpModule. Этот интерфейс содержит два простых метода – Init и Dispose.


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

Метод Dispose используется для освобождения ресурсов и вызывается в случае завершения всего приложения. Зачастую этот метод не содержит кода, и необходим только в том случае, когда необходимо явно освободить какие-либо ресурсы, которые были созданы модулем в момент инициализации.

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


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

Для того, чтобы определить логику HTTP-модуля, необходимо использовать события, которые доступны в рамках модели событий ASP.NET. Для того, чтобы подписаться на нужные события используется объект приложения HttpApplication, который передается в параметрах метода Init. Аналогично файлу приложения global.asax, в рамках HTTP-модуля можно подписаться на любые события цикла обработки запроса и приложения. Например, чтобы подписаться на событие BeginRequest можно использовать следующий код.


В данном случае мы создаем метод-обработчик события, и, используя объект приложения HttpApplication, подписываемся на событие. Аналогичным образом можно подписаться одновременно на несколько событий.


После создания HTTP-модуля необходимо уведомить среду исполнения о том, что необходимо использовать этот модуль при работе приложения. Для этого необходимо добавить информацию о HTTP-модуле в файл конфигурации приложения. Для этого используется конфигурационная секция "httpModules", которая расположена в секции "system.web". Для добавления нового модуля используется узел "add", который должен содержать атрибуты "name" и "type". Атрибут "name" содержит имя модуля, которое будет использоваться при мониторинге приложения. Атрибут "type" содержит полное имя класса модуля (включая пространства имен), а также имя сборки, если этот класс размещен во внешней сборке. Например, добавление модуля в приложение может выглядеть следующим образом.


После такого определения модуль будет загружен и проинициализирован при запуске приложения.

При исполнении приложения можно получить список всех используемых HTTP-модулей. Для этого можно использовать объект приложения HttpApplication, который содержит коллекцию Modules. Просмотреть информацию обо всех HTTP-модулях можно следующим образом.


HTTP-модули могут использоваться для реализации совершенно различных сценариев. Так, например, в существующей инфраструктуре ASP.NET содержится большой набор HTTP-модулей, которые реализуют различную логику. Среди таких HTTP-модулей присутствуют модули аутентификации (модуль безопасности), поддержки сессий, кэширования HTML-кода и др.

Удобство применения HTTP-модулей состоит в том, что однажды разработанный HTTP-модуль можно использовать во вновь создаваемом приложении. Для этого необходимо скопировать в проект сборку, содержащую модуль и разместить в конфигурационном файле информацию о HTTP-модуле. Кроме того, используя конфигурационный файл HTTP-модули можно очень удобно включать и отключать при отладке приложения. По этой причине HTTP-модули нашли широкое применение среди разработчиков приложений на базе ASP.NET.

Краткие итоги

HTTP-модули являются одним из наиболее важных механизмов расширения. HTTP-модули представляют собой классы, реализующие интерфейс IHttpModule. В рамках этого интерфейса доступно два метода – Init и Dispose. В методе Init производится подписка на события, содержащиеся в модели событий ASP.NET. Каждый HTTP-модуль загружается при запуске приложения и обрабатывает все запросы до тех пор, пока приложение не будет выгружено. Для подключения HTTP-модуля к существующей среде обработки запросов используется конфигурационный файл.

Марина Воробьева
Марина Воробьева
Виктория Ткаченко
Виктория Ткаченко

Проигрыватель не работает. После нажатия кнопки Play ничего не происходит.

Андрей Коробейников
Андрей Коробейников
Россия, Новосибирск, Сибирский государственный университет телекоммуникаций и информатики, 1999
Вадим Трунов
Вадим Трунов
Россия