Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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. При этом можно не только открыть данные приложения для всех пользователей вашего узла, но и сделать так, чтобы при изменении значений уровня приложения одним из пользователей эти изменения становилось видимыми для всех остальных пользователей при следующих обращениях к серверу.