在 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 事件)的方法类似。
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 文件) |
根据需要编译并链接到本地资源程序集和顶级程序集。 |
主题、主控页、其他源文件 |
在编译引用页时编译那些页所引用的各个主题、主控页和其他源代码文件的外观文件。 |
编译后的程序集缓存在服务器上并在后续请求时被重用,并且只要源代码未更改,就会在应用程序重新启动之间得到保留。
由于应用程序在第一次请求时进行编译,所以对应用程序的初始请求所花的时间会明显长于后续请求。可以预编译应用程序以减少第一次请求所需的时间。
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 事件。
分享到:
相关推荐
IIS7.0 ASP.NET 应用程序生命周期ASP.NET 应用程序生命周期ASP.NET 应用程序生命周期
iis 5.0 iis 6.0下载(xp下用)很多ghost系统都没有安装iis,所以这东西十分有用,对于asp.net程序员。有人反应安装不上,那是你不会安装,设置->控制面版->添加删除windows组件->到解压后的iis目录里找。欢迎访问...
IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述 IIS 7.0 的 ASP.NET 应用程序生命周期概述 ASP.NET 页生命周期概述 ASP.NET 编译概述 了解 ASP.NET 动态编译 如何:创建 ASP.NET 应用程序级别的事件处理程序
Asp.Net应用程序生命周期以浏览器向Web服务器(IIS)发送请求为起点。Web服务器接收到请求时,会对所请求文件的文件扩展名进行检查,确定应该由哪一个ISAPI扩展(Asp.Net是Web服务器下的一个ISAPI扩展)来处理请求,...
2003 IIS6.0 ASP.NET PHP PERL MSSQL MYSQL安全设置技术
Tomcat5.5与IIS5.0和IIS6.0集成的应用.pdf
如何在IIS6.0里面显示ASP.NET v2.0.50727
使用 NetBox 可以方便的将 asp 应用编译成为独立运行的执行程序,完全摆脱 iis 的束缚,在几乎所有的 Windows 版本上面直接运行,完全不需要考虑平台兼容性和对 asp 运行环境的要求。下面就是快速移植已有的 asp ...
2003 IIS6.0 ASP.NET PHP PERL MSSQL MYSQL安全设置技术
主要介绍Asp.net的工作原理,以及IIS5.0和6.0的区别. ASP.NET ISAPI 扩展 (aspnet_isapi.dll) 在 IIS 进程地址空间 (inetinfo.exe) 中运行,并通过命名管道将 ASP.NET 文件类型请求转发给 ASP.NET 辅助进程。 可以...
这是一个文件,iis5.0limiande,希望大家给一个iis6.0de安装包,在线等着用这是一个文件,iis5.0limiande,希望大家给一个iis6.0de安装包,在线等着用这是一个文件,iis5.0limiande,希望大家给一个iis6.0de安装包,...
IIS5.0IIS5.0IIS5.0IIS5.0IIS5.0
界面精美 替代iis运行asp.net的程序,支持局域网与广域网访问 需要安装.net4.0,方便布署 需要将安装.net4.0 并将所有文件复制到你的程序的根目录下,然后双击FWD.Server.exe 如果需要启动电脑即可访问,请将程序...
一个没有安装IIS环境运行 Asp.Net web应用程序的例子
2003系统需要的 IIS5.0 或者IIS6.0
IIS6.0以及5.0功能,基本操作,在服务器上的详细配置,常见错误以及解决办法,错误代码汇总!
iis5.0iis5.0iis5.0iis5.0iis5.0iis5.0iis5.0iis5.0iis5.0
IIS 6.0與 ASP .NET應用程式設計技巧
IIS5.0的一键安装程序,安装简单快捷 安装步骤:1、双击运行IIS一键安装程序 2、双击运行bat文件
这是在IIS6.0浏览ASP.NET2.0网页的页面显示