Global.asax文件
除了编写UI代码外,开发人员还可以将应用程序级别的逻辑和事件处理代码添加到他们的Web应用程序中。此代码不处理UI的生成,并且一般不为响应个别页请求而被调用。相反,它负责处理更高级别的应用程序事件,如
Application_Start、Application_End、Session_Start、Session_End等等。开发人员使用位于特定
Web应用程序虚拟目录树根处的Global.asax文件来创作此逻辑。第一次激活或请求应用程序命名空间内的任何资源或URL时,ASP.NET
自动分析该文件并将其编译成动态.NET框架类(此类扩展了HttpApplication基类)。
第一次激活或请求应用程序命名空间内的任何资源或URL时,ASP.NET分析Global.asax文件并将其动态编译成.NET
框架类。Global.asax文件被配置为自动拒绝任何直接URL请求,从而使外部用户不能下载或查看内部代码。
应用程序或会话范围内的事件
通过在Global.asax文件中创作符合命名模式“Application_EventName(AppropriateEventArgumentSignature)”的方法,开发人员可以为
HttpApplication基类的事件定义处理程序。例如:
C#:
<scriptlanguage="C#"runat="server">
voidApplication_Start(objectsender,EventArgse){
//Applicationstartupcodegoeshere
}
</script>
VB:
<scriptlanguage="VB"runat="server">
SubApplication_Start(SenderAsObject,EAsEventArgs)
'Applicationstartupcodegoeshere
EndSub
</script>
如果事件处理代码需要导入附加的命名空间,可以在.aspx页中使用@import指令,如下所示:
<%@ImportNamespace="System.Text"%>
第一次打开页时,引发应用程序和会话的Start事件:
C#:
voidApplication_Start(objectsender,EventArgse){
//Applicationstartupcodegoeshere
}
voidSession_Start(objectsender,EventArgse){
Response.Write("SessionisStarting...<br>");
Session.Timeout=1;
}
VB
SubApplication_Start(SenderAsObject,EAsEventArgs)
'Applicationstartupcodegoeshere
EndSub
SubSession_Start(SenderAsObject,EAsEventArgs)
Response.Write("SessionisStarting...<br>")
Session.Timeout=1
EndSub
对每个请求都引发BeginRequest和EndRequest事件。刷新页时,只显示来自BeginRequest、EndRequest
和Page_Load方法的消息。注意:通过放弃当前会话(单击“结束此会话”按钮),将创建新的会话并且再次引发Session_Start
事件。
应用程序或会话范围内的对象
静态对象、.NET框架类和COM组件都可以使用对象标记在Global.asax文件中定义。范围可以是appinstance、session
或application。appinstance范围表示对象特定于HttpApplication的一个实例并且不共享。
<objectid="id"runat="server"class=".NET
FrameworkclassName"scope="appinstance"/>
<objectid="id"runat="server"progid="COM
ProgID"scope="session"/>
<objectid="id"runat="server"classid="COM
ClassID"scope="application"/>