Следующий текст взят из книги, которую я читаю, «MCTS Self-Paced Training Kit (Exam 70-515) Разработка веб-приложений с ASP.NET 4». Он дает краткое изложение жизненного цикла приложения. *
- Пользователь сначала делает запрос на страницу на вашем сайте.
- Запрос направляется в конвейер обработки, который перенаправляет его в среду выполнения ASP.NET.
- Среда выполнения ASP.NET создает экземпляр класса ApplicationManager; этот экземпляр класса представляет домен .NET Framework, который будет использоваться для выполнения запросов вашего приложения. Домен приложения изолирует глобальные переменные от других приложений и позволяет каждому приложению загружать и выгружать отдельно, как требуется.
- После создания домена приложения создается экземпляр класса HostingEnvironment. Этот класс обеспечивает доступ к элементам внутри среды размещения, таким как папки каталогов.
- ASP.NET создает экземпляры основных объектов, которые будут использоваться для обработки запроса. Сюда входят объекты HttpContext, HttpRequest и HttpResponse.
- ASP.NET создает экземпляр класса HttpApplication (или экземпляр используется повторно). Этот класс также является базовым классом для файла Global.asax сайта. Вы можете использовать этот класс для перехвата событий, которые происходят, когда ваше приложение запускается или останавливается. Когда ASP.NET создает экземпляр HttpApplication, он также создает модули, настроенные для приложения, такие как SessionStateModule.
- Наконец, ASP.NET обрабатывает запрос через пиплину HttpApplication. Этот конвейер также включает в себя набор событий для проверки запросов, сопоставления URL-адресов, доступа к кешу и т. Д.
Затем книга продемонстрировала пример использования файла Global.asax:
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
Application["UsersOnline"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
}
</script>
Когда запускается приложение? В чем разница между сессией и уровнем приложения? Я не совсем понимаю, как это делается. Я думал, что классы уровня приложения «сидят поверх» объекта AppDomain, а AppDomain содержит информацию, специфичную для этого сеанса для этого пользователя. Может кто-нибудь объяснить, как IIS управляет классами уровня Applicaiton и как класс HttpApplication находится в AppDomain? Все ценится.