2011-01-08 1 views
3

Следующий текст из книги, которую я читаю: «MCTS Self-Paced Training Kit (Экзамен 70-515) Разработка веб-приложений с ASP .NET 4" . Это дает краткое изложение жизненного цикла приложения.Уровень приложения ASP.NET по сравнению с уровнем сеанса и Global.asax ... confused

  1. пользователь сначала делает запрос на странице вашего сайта.
  2. запрос направляется на конвейер обработки, который передает это для среды выполнения ASP.NET.
  3. Время выполнения ASP.NET создает экземпляр класса ApplicationManager, этот экземпляр класса представляет th e .NET framework domain, который будет использоваться для выполнения запросов для вашего приложения. Область приложения изолирует глобальные переменные от других приложений и позволяет каждому приложению загружать и разгружать отдельно, по мере необходимости.
  4. После того как домен приложения был создан, создается экземпляр класса HostingEnvironment. Этот класс обеспечивает доступ к элементам внутри среды хостинга, таким как папки каталогов.
  5. ASP.NET создает экземпляры основных объектов, которые будут использоваться для обработки запроса. Сюда входят объекты HttpContext, HttpRequest и HttpResponse.
  6. ASP.NET создает экземпляр класса HttpApplication (или экземпляр используется повторно). Этот класс также является базовым классом для файла Global.asax сайта. Вы можете использовать этот класс для захвата событий, которые происходят, когда ваше приложение запускается или останавливается. Когда ASP.NET создает экземпляр HttpApplication, он также создает модули, настроенные для приложения, такие как SessionStateModule.
  7. И, наконец, ASP.NET обрабатывает запрос через pipleline 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? Все ценится.

+0

Связанный: http://stackoverflow.com/questions/951137/asp-net-session-life-time-issue и http://stackoverflow.com/questions/2998136/advantages-and-disadvantages-of-using -приложения-переменные-в-веб-приложениях –

ответ

3

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

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

Для каждого приложения есть один AppDomain, не за сеанс или за запрос.

+0

*** Существует один AppDomain для каждого приложения, а не для сеанса или для каждого запроса. *** Влияет ли какое-либо приложение на веб-сайт в IIS?Мне нужно знать, только если только один AppDomain, управляющий всем запросом на один веб-сайт – Zviadi

+0

, зависит от того, что вы считаете Веб-сайтом ... вложенную папку на веб-сайте можно настроить как приложение, а затем запросы на эту папку будут обрабатываться ее собственное приложение, и такие вещи, как * HttpApplication *, будут уникальными для этой папки. Но в целом да, один веб-сайт - это одно приложение. –