Приложения ASP.NET. Сеансы. Global.asax.
ASP.NET-приложение состоит из всех Web-страниц и файлов с кодом, которые хранятся на Web-сервере в виртуальном каталоге или его подкаталогах. Как мы уже убедились, кроме .aspx-файлов и файлов с фоновым кодом в состав приложения также входят файлы global.аsах и config.web. В этом разделе главы мы рассмотрим возможности приложений ASP.NET. Затем мы изучим механизмы, которые обеспечивают работу с состоянием приложения и состоянием сеанса, а также конфигурирование Web-приложений.
Сеансы
Чтобы по достоинству оценить поддержку Web-приложений в ASP.NET, нужно иметь четкое представление о концепции Web-сеанса. Протокол передачи гипертекстовых файлов HTTP (HyperText Transfer Protocol) не хранит состояние приложения. Это значит, что не существует прямого способа, при помощи которого можно было бы узнать, исходит последовательность запросов от одного или от разных клиентов. Web-сервер, например информационный сервер Internet (US), может иметь механизм, при помощи которого исходящие от одного клиента запросы объединяются в логический сеанс. Работать с сеансами в ASP.NET очень легко.
Global.asax
В состав ASP.NET-приложения может входить файл Global .asax. В нем содержится код, который обрабатывает события уровня приложения, инициируемые ASP.NET. Этот файл расположен в корневом каталоге приложения. Если файл Global.asax в приложении отсутствует, ASP.NET считает, что обработчики событий уровня приложения не определены.
В данном коде приведены наиболее часто используемые события уровня приложения. Обычно за время существования Web-приложения происходят следующие события:
- Application_Start. Это событие возникает лишь один раз за все время работы приложения, когда создается первый экземпляр класса HttpApplication. Приложение запускается первый раз тогда, когда его запускает информационный сервер Internet (IIS) для первого пользователя. В обработчике событий можно инициализировать состояние, которое будет использоваться всем приложением.
- Session_Start возникает в начале каждого сеанса. На этом этапе можно инициализировать переменные сеанса.
- Application_BeginRequest инициируется в начале каждого отдельного запроса. Как правило, обработка запроса производится классом Page (Страница).
- Application_EndRequest инициируется в конце запроса.
- Session_End инициируется в конце каждого сеанса. Как правило, не нужно освобождать переменные, инициализированные в начале сеанса (при возникновении события Session_Start). Они будут освобождены автоматически в процессе сборки мусора. Но если открыт дорогостоящий ресурс, например, соединение с базой данных, тогда при возникновении этого события можно вызвать метод Dispose (Освободить ранее выделенную область памяти).
- Application_End инициируется в самом конце срока существования приложения, когда удаляется последний экземпляр HttpApplication