ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Состояния элементов управления используются аналогично состояниям представлений, но учет состояния элементов управления не отключается при отключении учета состояния представлений на уровне страницы. Как уже говорилось, эта возможность оказывается наиболее полезной для разработчиков пользовательских Web-элементов управления (обсуждение данной темы в нашей книге не предполагается). За подробностями обратитесь к документации .NET Framework 2.0 SDK.
Роль файла Global.asax
К этому моменту у вас может сложиться впечатление, что приложение ASP.NET представляет собой простой набор файлов *.аsрх и соответствующих Web-элементов управления. И хотя вы можете построить Web-приложение
Рис. 24.2. Добавление файла Global.asax
В некотором смысле файл Global.asax в ASP.NET аналогичен традиционному файлу *.exe, поскольку представляет поведение Web-узла в среде выполнения. После добавления файла Global.asax в Web-проект вы обнаружите, что этот файл на самом деле представляет собой блок ‹script›, содержащий набор обработчиков событий.
Однако первое впечатление может оказаться обманчивым. В среде выполнении программный код этого блока ‹script› преобразуется в тип класса, получающийся из System.Web.HttpApplication. Если вы имеете опыт работы с ASP.NET 1.х, то вы, наверное, вспомните, что там файл с внешним кодом поддержки для Global.asax буквально определял класс, получающийся из HttpApplication.
Как уже было сказано, члены, определённые в Global.asax, содержатся в обработчиках событий, позволяющих взаимодействовать с событиями на уровне приложения (а также сеанса). Описания этих членов предлагаются в табл. 24.1.
Таблица 24.1. Обработчики событий Global.asax
Обработчик события | Описание |
---|---|
Аррlication_Start | Вызывается только при запуске Web-приложения, поэтому генерируется только один раз за все время выполнения Web-приложения. Является идеальным местом для определения данных уровня приложения, доступных в любой точке Web-приложения |
Application_End | Вызывается при завершении работы приложения, например, вследствие превышения времени ожидания для последнего пользователя или при завершении работы приложения вручную с помощью IIS |
Session_Start | Вызывается
|
Session_End | Вызывается при завершении сеанса пользователя (обычно в результате превышения установленного времени ожидания) |
Application_Error | Глобальный обработчик ошибок, который вызывается тогда, когда Web-приложение генерирует необработанное исключение |
Последний глобальный шанс для обработки исключений
Позвольте указать на роль обработчика событий Application_Error. Напомним, что страница может использовать обработчик события Error для обработки любого исключения, сгенерированного в контексте страницы и оставшегося без обработки. Обработчик Application_Error оказывается последним пунктом возможной обработки исключений, которые не были обработаны на уровне страницы. Как и в случае события Error на уровне страницы, вы можете получить доступ к конкретному объекту System.Exception, используя наследуемое свойство Server.
Обработчик Application Error является "последним шансом" обработки события для вашего Web-приложения, где вы, вместо предъявления сообщения об ошибке пользователю, можете записать соответствующую информацию в журнал регистрации событий Web-сервера, например:
Базовый класс HttpApplication
Как уже говорилось, сценарий Global.asax динамически преобразуется в класс, который получается из базового класса System.Web.HttpApplication и обеспечивает те же функциональные возможности, что и тип System.Web.UI.Page. Описания соответствующих членов предлагаются в табл. 24.2.
Таблица 24.2. Ключевые члены типа System.Web.HttpApplication
Свойство | Описание |
---|---|
Application | Позволяет взаимодействовать с переменными уровня приложения, используя доступный тип HttpApplicationState |
Request | Позволяет взаимодействовать с входящим HTTP-запросом (с помощью HttpRequest) |
Response | Позволяет взаимодействовать с HTTP-ответом (с помощью HttpResponse) |
Server | Получает внутренний объект сервера для текущего запроса (с помощью HttpServerUtilitу) |
Session | Позволяет взаимодействовать с переменными уровня сеанса, используя доступный тип HttpSessionState |