[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 核心对象。
- 创建了应用程序域
- 实例化 HostingEnvironment 对象
- ASP.NET 将创建并初始化核心对象,
- HttpContext、HttpRequest 和 HttpResponse (HttpContext 类包含特定于当前应用程序请求的对象,如 HttpRequest 和 HttpResponse 对象)
HttpRequest 对象包含有关当前请求的信息,包括 Cookie 和浏览器信息。
HttpResponse 对象包含发送到客户端的响应,包括所有呈现的输出和 Cookie。
将 HttpApplication 对象分配给请求
-
- 创建 HttpApplication 的实例时,
- 同时创建所有已配置的模块。例如,如果将应用程序这样配置,ASP.NET 就会创建一个 SessionStateModule 模块。
- 创建了所有已配置的模块之后,将调用HttpApplication 类的 Init 方法。
通过创建 HttpApplication 类的实例启动应用程序
(如果应用程序具有 Global.asax 文件,则 ASP.NET 会创建 Global.asax 类(从 HttpApplication类派生)的一个实例,并使用该派生类表示应用程序。)
注意
第一次在应用程序中请求 ASP.NET 页或进程时,将创建 HttpApplication 的一个新实例。
下面的关系图说明了这种关系:
由 HttpApplication 管线处理请求。
- 对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。有关更多信息,请参见 ValidateRequest 和脚本侵入概述。
- 如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。
- 引发 BeginRequest 事件。
- 引发 AuthenticateRequest 事件。
- 引发 PostAuthenticateRequest 事件。
- 引发 AuthorizeRequest 事件。
- 引发 PostAuthorizeRequest 事件。
- 引发 ResolveRequestCache 事件。
- 引发 PostResolveRequestCache 事件。
- 根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。
- 引发 PostMapRequestHandler 事件。
- 引发 AcquireRequestState 事件。
- 引发 PostAcquireRequestState 事件。
- 引发 PreRequestHandlerExecute 事件。
- 为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版 BeginProcessRequest)。例如,如果该请求针对某页,则当前的页实例将处理该请求。
- 引发 PostRequestHandlerExecute 事件。
- 引发 ReleaseRequestState 事件。
- 引发 PostReleaseRequestState 事件。
- 如果定义了 Filter 属性,则执行响应筛选。
- 引发 UpdateRequestCache 事件。
- 引发 PostUpdateRequestCache 事件。
- 引发 EndRequest 事件。
在处理该请求时将由 HttpApplication 类执行以下事件。希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件。
- [ASP.NET] ASP.NET Application lifecycle
- Asp.Net Page LifeCycle
- [ASP.NET] ASP.NET web page Lifecycle
- ASP.NET 2.0 Page LifeCycle
- ASP.Net的Application
- ASP.NET的Application
- ASP.Net的Application
- ASP.net--Application对象
- ASP.NET-Application对象
- asp.net 页面生命周期(Page lifeCycle)
- Securing an ASP.Net application...
- [ASP.net]Server Application Unavailable
- Sample ASP.NET AJAX Application
- asp.net的application对象
- ASP.NET页面对象 - Application
- asp.net中的Application概述
- Server Application Error ASP.NET
- asp.net中的Application概述
- ORACLE 去除重复记录
- Gamebryo LightSpeed 3D Engine
- 如何实现登陆后跳转的预定页面 【转】
- Windows xp/Vista/Linux的内核映射以及内存置换算法
- 2010年最骚最贱最有深度的100句话
- [ASP.NET] ASP.NET Application lifecycle
- windows fat32 转 ntfs
- 有关likely和unlikely
- 在Linux安装Memcache缓存服务器端的方法
- attachEvent、addEventListener、detachEvent、removeEventListener
- 天 问
- “赢在中国”对80后的30个忠告
- 缓存的位置
- IP地址被封修改网卡MAC地址