Опубликован: 30.01.2013 | Доступ: свободный | Студентов: 1292 / 162 | Длительность: 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 ничего не происходит.