七彩课堂[网页设计ASP.NET教程系列]
Global.asax 文件是可选的
  使用Global.asax 文件 Global.asax 文件
Global.asax 文件(也称作 ASP.NET 应用程序文件)是可选文件,包含用于响应 ASP.NET 或 HttpModule 引发的应用程序级别事件的代码。Global.asax 文件驻留在基于 ASP.NET 的应用程序的根目录中。在运行时,分析 Global.asax 文件并将其编译到一个动态生成的 .NET Framework 类,该类是从 HttpApplication 基类派生的。Global.asax 文件本身被配置为自动拒绝对它的任何直接 URL 请求;外部用户无法下载或查看在该文件中编写的代码。
ASP.NET Global.asax 文件能够与 ASP Global.asax 文件共存。您可以在 WYSIWYG 设计器中或“记事本”中创建 Global.asax 文件,或者将它创建为编译的类并将该类作为程序集部署在应用程序的 \Bin 目录中。但是,在后面的一种情况中,您仍需要一个引用该程序集的 Global.asax 文件。
Global.asax 文件是可选的。如果不定义该文件,ASP.NET 页框架假设您未定义任何应用程序或会话事件处理程序。
当您将更改保存到活动 Global.asax 文件时,ASP.NET 页框架检测到该文件已被更改。它完成应用程序的所有当前请求,将 Application_OnEnd 事件发送到任何侦听器,并重新启动应用程序域。实际上,这会重新启动应用程序,关闭所有浏览器会话并刷新所有状态信息。当来自浏览器的下一个传入请求到达时,ASP.NET 页框架将重新分析并重新编译 Global.asax 文件并引发 Application_OnStart 事件。
有关将 Global.asax 文件用于应用程序的详细信息,请参见下面的主题:
使用 HttpApplication 实例
将模块用于 Global.asax 文件
使用 HttpApplication 实例
在应用程序的生存期中,ASP.NET 维护一系列 Global.asax 导出的 HttpApplication 实例。当应用程序接收到 HTTP 请求时,ASP.NET 页框架将分配这些实例中的一个来处理该请求。该特定的 HttpApplication 实例负责管理它所分配到的请求的整个生存期,并且只有在完成该请求后才可以再次使用该实例。
通过 HttpApplication 类,可以以编程方式访问 HttpApplication.Init 和 HttpApplication.Dispose 方法,以及 Application_OnStart 和 Application_OnEnd 事件。也可以访问由 HttpModule 公开的任何事件。
重写 Init 和 Dispose 方法
在创建 HttpApplication 类的实例后立即调用 HttpApplication.Init 方法。可以使用该方法创建并配置要跨所有处理事件使用的任何对象,如下面的示例所示。
[Visual Basic]
<script language="VB" runat="server">
Public Overrides Sub Init()
'Insert something interesting here.
End Sub
</script>
[C#]
<script language="C#" runat="server">
public override void Init() {
// Insert something interesting here.
}
</script>Init 方法与 Application_OnStart 事件不同,因为总是对应用程序中的所有 HttpApplication 实例调用该方法。在应用程序的生存期中只调用一次 Application_OnStart,这便是对 HttpApplication 的第一个实例调用。使用 Application_OnStart 只是为了创建或修改所有管线实例共享的状态,例如 ApplicationState 对象的使用。因为局部变量不被多个 HttpApplication 实例共享,所以不要使用它来创建局部变量。紧接着销毁 HttpApplication 类的实例之前调用 HttpApplication.Dispose 方法。您可以使用它来清理任何本地资源。
Dispose 方法与 Application_OnEnd 事件不同,因为总是对应用程序中所有 HttpApplication 实例调用该方法。在应用程序的生存期中只引发一次 Application_OnEnd,这便是对被强行停止 HttpApplication 的最后一个实例引发。使用 Application_OnEnd 只是为了清理所有管线实例共享的状态或资源,例如 ApplicationState 对象的使用。因为局部变量不被多个 HttpApplication 实例共享,所以不要使用它来清理局部变量。
在请求执行的 Init 或 Dispose 阶段,您不能使用 HttpApplication 实例的 Request、Response 和 Session 属性。
下面的示例演示如何重写 HttpApplication 基类提供的两个生命周期方法。
[Visual Basic]
<script language="VB" runat=server>
Public Overrides Sub Init()
' Init override code goes here.
End Sub
Public Overrides Sub Dispose()
' Init override code goes here.
End Sub
</script>
[C#]
<script language="C#" runat=server>
public override void Init() {
// Init override code goes here.
}
public override void Dispose() {
// Init override code goes here.
}
</script>处理 HttpApplication 事件
您可以使用 Global.asax 文件来同步 HttpApplication 基类公开的任何事件。若要完成该操作,您必须使用下面的命名模式来创作方法:
Application_EventName(AppropriateEventArgumentSignature)例如,如果想要响应应用程序的 OnStart、BeginRequest 和 OnEnd 事件的代码,您包括在 Global.asax 文件中的代码看起来可能像下面这样。
[Visual Basic]
<Script language="VB" runat="server">
Sub Application_OnStart()
'Application start-up code goes here.
End Sub
Sub Application_BeginRequest()
'Application code for each request could go here.
End Sub
Sub Application_OnEnd()
'Application clean-up code goes here.
End Sub
</script>
[C#]
<Script language="C#" runat="server">
public void Application_OnStart() {
// Application start-up code goes here.
}
public void Application_BeginRequest() {
// Application code for each request could go here.
}
public void Application_OnEnd() {
// Application clean-up code goes here.
}
</script>
将模块用于 Global.asax 文件
ASP.NET 在 Global.asax 中提供多个模块,这些模块参与每个请求并公开您可以处理的事件。您可以随意自定义或扩展这些模块,或开发全新的自定义模块来处理对基于 ASP.NET 的应用程序进行的 HTTP 请求的信息及其相关信息。例如,您可以创建一个输出缓存模块,该模块实现整个应用程序的输出缓存行为。
所有模块(不管是自定义的还是 .NET Framework 提供的)必须实现 IHttpModule 接口。只要这些模块注册到应用程序,您便可以方便地与进入应用程序的 HTTP 请求进行交互。
处理 HttpModule 事件
可以使用 Global.asax 文件来处理请求中模块公开的任何事件。例如,您可以为 ASP.NET Web 应用程序创建一个自定义身份验证模块,在该模块中可以公开一个 OnAuthenticateRequest 事件。您编写的处理 HTTPModule 模块所公开的事件的代码必须符合以下命名模式:
FriendlyModuleName_EventName(AppropriateEventArgumentSignature)例如,如果要包括会话的开始和结束以及 OnAuthenticateRequest 事件的事件处理代码,则它看起来可能像下面这样。
[Visual Basic]
<Script language="VB" runat="server">
Sub Session_OnStart()
'Session start-up code goes here.
End Sub
Sub Session_OnEnd()
'Session clean-up code goes here.
End Sub
Sub Application_OnAuthenticateRequest(Source As Object, Details as EventArgs)
'Authentication code goes here.
End Sub
</script>
[C#]
<Script language="C#" runat="server">
void Session_OnStart() {
// Session start-up code goes here.
}
void Session_OnEnd() {
// Session clean-up code goes here.
}
void Application_OnAuthenticateRequest(Object Source, EventArgs Details) {
// Authentication code goes here.
}
</script>
 
信息推荐
资讯中心 | 电子商务 | 搜索营销 | 设计学院 | 中医养生 | 养生保健 | 节日祝福 | 民俗文化 | 奇闻趣事
建站知识 | 人世百态 | 网站导航 | 传统节日 | 搜索热点 | 星座运势 | 趣闻轶事 | 祝福的话 | 短信大全
© 2023 QicaiSpace.Com