‹%@ Application Language="C#" %›
‹script runat="server"›
void Application_Start(Object sender, EventArgs e) {
// Код, выполняемый при запуске приложения.
}
void Application_End(Object sender, EventArgs e) {
// Код, выполняемый при завершении приложения.
}
void Applicatioт_Error(Object sender, EventArgs e) {
// Код, выполняемый при появлении необработанной ошибки.
}
void Session_Start(Object sender, EventArgs e) {
// Код, выполняемый при открытии нового сеанса.
}
void Session_End(Object sender, EventArgs e) {
// Код, выполняемый при завершении сеанса.
}
‹/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.
void Application_Error(Object sender, EventArgs e) {
Exception ex = Server.GetLastError();
Response.Write(ex.Message);
Server.ClearError();
}
Обработчик Application Error() является "последним шансом" обработки события для вашего Web-приложения, где вы, вместо предъявления сообщения об ошибке пользователю, можете записать соответствующую информацию в журнал регистрации событий Web-сервера, например:
‹%@ Import Namespace = "System.Diagnostics"%›
…
void Application_Error(Object sender, EventArgs e) {
// Запись последнего события в журнал событий.
Exception ex = Server.GetLastError();
EventLog ev = new EventLog("Application");
ev.WriteEntry(ex.Message, EventLogEntryType.Error);
Server.ClearError();
Response.Write("Это приложение "зависло". Извините!");
}
Базовый класс 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 |
Различия между приложением и сеансом
Читать дальше