[ASP.NET] ASP.NET Application lifecycle

来源:互联网 发布:捷克留学知乎 编辑:程序博客网 时间:2024/06/05 11:10

 

阶段

说明

用户从 Web 服务器请求应用程序资源。

ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点。ASP.NET 是 Web 服务器下的 ISAPI 扩展。Web 服务器接收到请求时,会对所请求的文件的文件扩展名进行检查,确定应由哪个 ISAPI 扩展处理该请求,然后将该请求传递给合适的 ISAPI 扩展。ASP.NET 处理已映射到其上的文件扩展名,如 .aspx、.ascx、.ashx 和 .asmx。

 

注意

如果要创建服务于特定文件扩展名的自定义处理程序,必须在 IIS 中将该扩展名映射到 ASP.NET,还必须在应用程序的 Web.config 文件中注册该处理程序。有关更多信息,请参见 HTTP 处理程序介绍

ASP.NET 接收对应用程序的第一个请求。

    当 ASP.NET 接收到对应用程序中任何资源的第一个请求时,名为 ApplicationManager 的类会创建一个应用程序域。应用程序域为全局变量提供应用程序隔离,并允许单独卸载每个应用程序。在应用程序域中,将为名为 HostingEnvironment 的类创建一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。

     

    如果需要,ASP.NET 还可对应用程序中的顶级项进行编译,其中包括 App_Code 文件夹中的应用程序代码。有关更多信息,请参见本主题后面的“编译生命周期”

为每个请求创建 ASP.NET 核心对象。

  1. 创建了应用程序域
  2. 实例化 HostingEnvironment 对象
  3. ASP.NET 将创建并初始化核心对象,
    1. HttpContextHttpRequestHttpResponse HttpContext 类包含特定于当前应用程序请求的对象,如 HttpRequestHttpResponse 对象
  4. HttpRequest 对象包含有关当前请求的信息,包括 Cookie 和浏览器信息。

    HttpResponse 对象包含发送到客户端的响应,包括所有呈现的输出和 Cookie。

HttpApplication 对象分配给请求

  •  
    1. 创建 HttpApplication 的实例时,
    2. 同时创建所有已配置的模块。例如,如果将应用程序这样配置,ASP.NET 就会创建一个 SessionStateModule 模块。
    3. 创建了所有已配置的模块之后,将调用HttpApplication 类的 Init 方法。
  • 通过创建 HttpApplication 类的实例启动应用程序

    如果应用程序具有 Global.asax 文件,则 ASP.NET 会创建 Global.asax 类(从 HttpApplication类派生)的一个实例,并使用该派生类表示应用程序。

     

    注意

    第一次在应用程序中请求 ASP.NET 页或进程时,将创建 HttpApplication 的一个新实例

     

     

    下面的关系图说明了这种关系:

     

HttpApplication 管线处理请求。

    在处理该请求时将由 HttpApplication 类执行以下事件。希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件。

  1. 对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。有关更多信息,请参见 ValidateRequest脚本侵入概述
  2. 如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。
  3. 引发 BeginRequest 事件。
  4. 引发 AuthenticateRequest 事件。
  5. 引发 PostAuthenticateRequest 事件。
  6. 引发 AuthorizeRequest 事件。
  7. 引发 PostAuthorizeRequest 事件。
  8. 引发 ResolveRequestCache 事件。
  9. 引发 PostResolveRequestCache 事件。
  10. 根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。
  11. 引发 PostMapRequestHandler 事件。
  12. 引发 AcquireRequestState 事件。
  13. 引发 PostAcquireRequestState 事件。
  14. 引发 PreRequestHandlerExecute 事件。
  15. 为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版 BeginProcessRequest)。例如,如果该请求针对某页,则当前的页实例将处理该请求。
  16. 引发 PostRequestHandlerExecute 事件。
  17. 引发 ReleaseRequestState 事件。
  18. 引发 PostReleaseRequestState 事件。
  19. 如果定义了 Filter 属性,则执行响应筛选。
  20. 引发 UpdateRequestCache 事件。
  21. 引发 PostUpdateRequestCache 事件。
  22. 引发 EndRequest 事件。
原创粉丝点击