3

以下文本来自我正在阅读的书“MCTS 自定进度培训套件(考试 70-515)使用 ASP.NET 4 进行 Web 应用程序开发”。它提供了应用程序生命周期的概要。

  1. 用户首先请求您网站中的页面。
  2. 请求被路由到处理管道,后者将其转发到 ASP.NET 运行时。
  3. ASP.NET 运行时创建 ApplicationManager 类的实例;此类实例表示将用于执行应用程序请求的 .NET 框架域。应用程序域将全局变量与其他应用程序隔离开来,并允许每个应用程序根据需要单独加载和卸载。
  4. 创建应用程序域后,将创建 HostingEnvironment 类的实例。此类提供对托管环境内项目的访问,例如目录文件夹。
  5. ASP.NET 创建将用于处理请求的核心对象的实例。这包括 HttpContext、HttpRequest 和 HttpResponse 对象。
  6. ASP.NET 创建 HttpApplication 类的实例(或重复使用实例)。此类也是站点的 Global.asax 文件的基类。您可以使用此类来捕获应用程序启动或停止时发生的事件。当 ASP.NET 创建 HttpApplication 的实例时,它还会创建为应用程序配置的模块,例如 SessionStateModule。
  7. 最后,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 下吗?任何事情都值得赞赏。

4

1 回答 1

3

没有任何东西存在于外部,AppDomain因此当然HttpApplication必须在内部实例化。

第 3 步到第 6 步仅在应用程序的生命周期内发生一次。创建ApplicationManager实例后,将不会为下一个请求再次创建它。对于HostingEnvironment和 也是如此HttpApplication。这意味着存储在应用程序集合中的值将保留在那里,以便在应用程序的生命周期内获取所有以后的请求。

每个应用程序有一个AppDomain,而不是每个会话或每个请求。

于 2011-01-08T22:37:33.100 回答