ASP.NET Уровень приложения против уровня сессионного и Global.Asax ... confused

StackOverflow https://stackoverflow.com/questions/4635535

Вопрос

Следующий текст из книги, которую я читаю, «MCTS самостоятельный тренировочный комплект (экзамен 70-515) разработка веб-приложений с ASP.NET 4". Это дает вскрытие жизненного цикла приложений.

  1. Пользователь сначала делает запрос на страницу на вашем сайте.
  2. Запрос направляется на обработку конвейера, который пересылает его в среду выполнения ASP.NET.
  3. Время выполнения ASP.NET создает экземпляр класса ApplicationManager; Этот экземпляр класса представляет собой домен .NET Framework, который будет использоваться для выполнения запросов для вашего приложения. Домен приложений изолярует глобальные переменные из других приложений и позволяет каждому приложению загружать и разгрузить отдельно, по мере необходимости.
  4. После создания домена приложения создан экземпляр класса HostingEnvironment. Этот класс предоставляет доступ к элементам внутри среды хостинга, таких как папки каталогов.
  5. ASP.NET создает экземпляры основных объектов, которые будут использоваться для обработки запроса. Это включает в себя httpContext, httprequest и httpresponse объекты.
  6. ASP.NET создает экземпляр класса Htthapplication (или экземпляр повторно используется). Этот класс также является базовым классом для файла Global.Asax сайта. Вы можете использовать этот класс для ловушки событий, которые происходят, когда ваше приложение запускается или останавливается. Когда ASP.NET создает экземпляр httpapplication, он также создает модули, настроенные для приложения, такого как сеансStateModule.
  7. Наконец, запрос процессов ASP.NET через Pipline Htthapplication. Этот трубопровод также включает в себя набор событий для проверки запросов, сопоставления 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 управляет классами уровня Champaiaton, и как класс htthapplication сидит под Appdomain? Все ценится.

Это было полезно?

Решение

Ничто не живет за пределами AppDomain так конечно HttpApplication должен быть создан внутри одного.

Шаг 3-6 происходит только один раз в срок службы вашего приложения. Когда ан ApplicationManager Экземпляр был создан, он не будет создан снова для следующего запроса. То же самое для HostingEnvironment а также HttpApplication. Отказ Это означает, что значения, хранящиеся в сборе приложения, будут оставаться там, чтобы получить все более поздние запросы в течение жизни приложения.

Есть один AppDomain за приложение, не за сеанс или на запрос.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top