以下文字来自我正在阅读的书“MCTS Self-Paced Training Kit(考试70-515)使用ASP.NET 4进行Web应用程序开发”。它给出了应用程序生命周期的概述。
- 用户首先请求您网站中的网页。
- 请求被路由到处理管道,处理管道将其转发到ASP.NET运行时。
- ASP.NET运行库创建ApplicationManager类的实例;此类实例表示将用于执行应用程序请求的.NET框架域。应用程序域将全局变量与其他应用程序隔离,并允许每个应用程序根据需要单独加载和卸载。
- 创建应用程序域后,将创建HostingEnvironment类的实例。此类提供对托管环境中项目的访问,例如目录文件夹。
- ASP.NET创建将用于处理请求的核心对象的实例。这包括HttpContext,HttpRequest和HttpResponse对象。
- ASP.NET创建HttpApplication类的实例(或重用实例)。此类也是站点的Global.asax文件的基类。您可以使用此类来捕获应用程序启动或停止时发生的事件。当ASP.NET创建HttpApplication的实例时,它还会创建为应用程序配置的模块,例如SessionStateModule。
- 最后,ASP.NET通过HttpApplication pipleline处理请求。此管道还包括一组用于验证请求,映射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 :(得分:3)
AppDomain
以外没有任何东西存在,所以HttpApplication
当然必须在其中实例化。
步骤3到6仅在应用程序的生命周期内发生。当创建ApplicationManager
实例时,不会再次为下一个请求创建实例。 HostingEnvironment
和HttpApplication
也是如此。这意味着存储在Application-collection中的值将保留在那里以获取应用程序生命周期内的所有后续请求。
每个应用程序只有一个AppDomain
,而不是每个会话或每个请求。