Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 660

Эндрю Троелсен

Последний глобальный шанс для обработки исключений

Позвольте указать на роль обработчика событий 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

Различия между приложением и сеансом

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