David的测试技术空间,收藏好文档和分享我的技术理解。5年的数通产品测试和安全产品测试经验,3年Web产品测试和多年测试管理和测试工具开发经验。目前关注性能分析调优、Jmeter和TestNG+WebDriver+Hamcrest的培训推广。Welcome沟通交流,请留言或者发邮件到daviwang_2004 at soguo.com。
asp.net应用程序生命周期概述(msdn)
上一篇 /
下一篇 2007-10-19 09:09:19
/ 个人分类:旧资料
http://msdn2.microsoft.com/zh-cn/library/ms178473(VS.80).aspx
ASP.NET
ASP.NET 应用程序生命周期概述
本
主题概述应用程序生命周期,列出重要的生命周期事件,并描述如何编写适合应用程序生命周期的代码。在 ASP.NET 中,若要对 ASP.NET
应用程序进行初始化并使它处理请求,必须执行一些处理步骤。此外,ASP.NET 只是对浏览器发出的请求进行处理的 Web
服务器结构的一部分。了解应用程序生命周期非常重要,这样才能在适当的生命周期阶段编写代码,达到预期的效果。
应用程序生命周期概述
下表描述了 ASP.NET 应用程序生命周期的各个阶段。
生命周期事件和 Global.asax 文件
在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法。若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global.asax 的文件。
如果创建了 Global.asax 文件,ASP.NET 会将其编译为从HttpApplication类派生的类,然后使用该派生类表示应用程序。
HttpApplication进程的一个实例每次只处理一个请求。由于在访问应用程序类中的非静态成员时不需要将其锁定,这样可以简化应用程序的事件处理过程。这样还可以将特定于请求
的数据存储在应用程序类的非静态成员中。例如,可以在 Global.asax 文件中定义一个属性,然后为该属性赋一个特定于请求的值。
通过使用命名约定Application_event(如Application_BeginRequest),ASP.NET 可在 Global.asax 文件中将应用程序事件自动绑定到处理程序。这与将 ASP.NET 页方法自动绑定到事件(如页的Page_Load事件)的方法类似。有关详细信息,请参见ASP.NET 页生命周期概述。
Application_Start和Application_End方法是不表示HttpApplication事件的特殊方法。在应用程序域的生命周期期间,ASP.NET 仅调用这些方法一次,而不是对每个HttpApplication实例都调用一次。
下表列出在应用程序生命周期期间使用的一些事件和方法。实际远不止列出的这些事件,但这些事件是最常用的。
事件或方法 | 说明 |
---|
Application_Start | 请求 ASP.NET 应用程序中第一个资源(如页)时调用。在应用程序的生命周期期间仅调用一次Application_Start方法。可以使用此方法执行启动任务,如将数据加载到缓存中以及初始化静态值。 在应用程序启动期间应仅设置静态数据。由于实例数据仅可由创建的HttpApplication类的第一个实例使用,所以请勿设置任何实例数据。 |
Application_event | 在应用程序生命周期中的适当时候引发,请参见本主题前面的应用程序生命周期表中列出的内容。 Application_Error可在应用程序生命周期的任何阶段引发。 由于请求会短路,因此Application_EndRequest是唯一能保证每次请求时都会引发的事件。例如,如果有两个模块处理Application_BeginRequest事件,第一个模块引发一个异常,则不会为第二个模块调用Application_BeginRequest事件。但是,会始终调用Application_EndRequest方法使应用程序清理资源。 |
HttpApplication.Init | 在创建了所有模块之后,对HttpApplication类的每个实例都调用一次。 |
Dispose | 在销毁应用程序实例之前调用。可使用此方法手动释放任何非托管资源。有关更多信息,请参见清理非托管资源。 |
Application_End | 在卸载应用程序之前对每个应用程序生命周期调用一次。 |
编译生命周期
在第一次对应用程序发出请求时,ASP.NET 按特定顺序编译应用程序项。要编译的第一批项称为顶级项。在第一次请求之后,仅当依赖项更改时才会重新编译顶级项。下表描述编译 ASP.NET 顶级项的顺序。
项 | 说明 |
---|
App_GlobalResources | 编译应用程序的全局资源并生成资源程序集。应用程序的 Bin 文件夹中的任何程序集都链接到资源程序集。 |
App_WebResources | 创建并编译 Web 服务的代理类型。所生成的 Web 引用程序集将链接到资源程序集(如存在)。 |
Web.config 文件中定义的配置文件属性 | 如果应用程序的 Web.config 文件中定义了配置文件属性,则生成一个包含配置文件对象的程序集。 |
App_Code | 生成源代码文件并创建一个或更多个程序集。所有代码程序集和配置文件程序集都链接到资源和 Web 引用程序集(如果有)。 |
Global.asax | 编译应用程序对象并将其链接到所有先前产生的程序集。 |
在编译应用程序的顶级项之后,ASP.NET 将根据需要编译文件夹、页和其他项。下表描述编译 ASP.NET 文件夹和项的顺序。
项 | 说明 |
---|
App_LocalResources | 如果包含被请求项的文件夹包含 App_LocalResources 文件夹,则编译本地资源文件夹的内容并将其链接到全局资源程序集。 |
各个网页(.aspx 文件)、用户控件(.ascx 文件)、HTTP 处理程序(.ashx 文件)和 HTTP 模块(.asmx 文件) | 根据需要编译并链接到本地资源程序集和顶级程序集。 |
主题、主控页、其他源文件 | 在编译引用页时编译那些页所引用的各个主题、主控页和其他源代码文件的外观文件。 |
编译后的程序集缓存在服务器上并在后续请求时被重用,并且只要源代码未更改,就会在应用程序重新启动之间得到保留。
由于应用程序在第一次请求时进行编译,所以对应用程序的初始请求所花的时间会明显长于后续请求。可以预编译应用程序以减少第一次请求所需的时间。有关更多信息,请参见如何:预编译 ASP.NET 网站。
Application Restarts(应用程序重新启动的次数)
修改 Web 应用程序的源代码将导致 ASP.NET 把源文件重新编译为程序集。当修改应用程序中的顶级项时,应用程序中引用顶级程序集的其他所有程序集也会被重新编译。
此外,修改、添加或删除应用程序的已知文件夹中的某些类型的文件将导致应用程序重新启动。下列操作将导致应用程序重新启动:
添加、修改或删除应用程序的 Bin 文件夹中的程序集。
添加、修改或删除 App_GlobalResources 或 App_LocalResources 文件夹中的本地化资源。
添加、修改或删除应用程序的 Global.asax 文件。
添加、修改或删除 App_Code 目录中的源代码文件。
添加、修改或删除配置文件配置。
添加、修改或删除 App_WebReferences 目录中的 Web 服务引用。
添加、修改或删除应用程序的 Web.config 文件。
当应用程序需要重新启动时,ASP.NET 将在重新启动应用程序域和加载新的程序集之前,从现有应用程序域和旧的程序集中为所有挂起的请求提供服务。
HTTP 模块
ASP.NET 应用程序生命周期可通过IHttpModule类进行扩展。ASP.NET 包含若干实现IHttpModule的类,如SessionStateModule类。您还可以自行创建实现IHttpModule的类。
如果向应用程序添加模块,模块本身会引发事件。通过使用modulename_eventname约定,应用程序可以在 Global.asax 文件中预订这些事件。例如,若要处理FormsAuthenticationModule对象引发的Authenticate事件,可以创建一个名为FormsAuthentication_Authenticate的处理程序。
默认情况下,ASP.NET 中会启用SessionStateModule类。所有会话事件将自动命名为Session_event,如Session_Start。每次创建新会话时都会引发Start事件。有关更多信息,请参见会话状态概述。
请参见
收藏
举报
TAG:
与目前工作有关的杂项