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

Анатомия приложений ASP.NET

Глобальные события приложения

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

Модель событий ASP.NET содержит два типа глобальных событий, которые можно обработать: события, которые возникают каждый раз при обработке запроса и события, которые возникают не всегда, а только при определенных условиях.

События, которые возникают при обработке каждого запроса генерируются в следующем порядке:

BeginRequest генерируется в начале выполнения каждого запроса;
AuthenticateRequest генерируется непосредственно перед моментом как будет выполнена аутентификация. Это стартовая точка для создания собственной системы аутентификации;
AuthorizeRequest генерируется непосредственно перед моментом авторизации;
ResolveRequestCache генерируется в момент проверки локального кэша на наличие текущей страницы в кэше;
AcquireRequestState генерируется в момент, когда для клиента будет получена информация, специфичная для сеанса (Session);
PreRequestHandlerExecute генерируется непосредственно перед тем, как управление будет передано HTTP-обработчику;
PostRequestHandlerExecute генерируется сразу после того, как запрос будет обработан HTTP-обработчиком;
ReleaseRequestState генерируется в момент, когда информация, специфичная для сеанса сериализуется из коллекции Session в строку, чтобы стать доступной для следующего запроса;
UpdateRequestCache генерируется в момент добавления информации в кэш выходных данных;
EndRequest генерируется в конце запроса перед тем, как объекты будут уничтожены.

Также есть ряд специфичных событий, которые генерируются при определенных условиях:

Start генерируется в момент, когда впервые запускается приложение и создается домен приложения;
SessionStart генерируется всякий раз, когда начинается новый сеанс;
SessionEnd генерируется при завершении сеанса;
Error генерируется всякий раз, когда в приложении возникает необработанное событие;
End генерируется в момент завершения работы приложения;
Disposed генерируется после завершения работы приложения, когда сборщик мусора .NET готов к восстановлению занимаемой памяти.

Для использования модели событий ASP.NET необходимо переопределить класс приложения HttpApplication. Для этого нужно добавить в проект файл приложения global.asax.

Для того чтобы подписаться на глобальные события, необходимо в файл приложения добавить методы, имена которых соответствуют именам событий, причем к имени события необходимо добавить название "Application_". Например, чтобы подписаться на событие Start, необходимо создать метод "Application_Start". Аналогичным образом можно создать обработчики и для других событий. Пример файла приложения с созданными обработчиками глобальных событий приведен ниже.


Аналогичным образом на глобальные события можно подписаться из другого места, например, HTTP-модуля ASP.NET (этот механизм будет рассмотрен далее). Для этого следует воспользоваться классом HttpApplication.


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

Таким образом, глобальные события ASP.NET позволяют встроить дополнительную логику в существующую инфраструктуру, обеспечивая тем самым гибкими возможностями по расширению.

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

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

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

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

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