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

  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 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如何管理申请级课程,以及HTTPApplication类是如何在AppDomain下坐下的?任何事情都值得赞赏。

有帮助吗?

解决方案

没有什么可以生活在 AppDomain 所以当然 HttpApplication 必须在一个内实例化。

步骤3至6仅在您的应用程序的使用寿命中发生一次。当 ApplicationManager 实例已经创建了它不会为下一个请求创建它。也是如此 HostingEnvironmentHttpApplication. 。这意味着在应用程序收集中存储的值将留在那里,以便在申请的生命周期内获得所有以后的请求。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top