HTTP请求上下文(三):global.asax文件

      global.asax文件能够处理由asp.net运行库或注册到HTTP模块事件引发的事件处理程序。此文件是可选的,如果没有此文件,asp.net运行时会假定没有定义应用程序或模块的事件处理程序。为了使该文件中的内容生效,此文件必须置于应用程序的根目录下。
      
一.global.asax文件的编译
      如果定义了此文件,那么在应用程序启动时,该文件会被解析为源类,并会被编译。和其他动态生成的程序集一样,根据该文件生成的程序集也会在临时目录下创建下面是asp.net根据global.asax文件生成的c#源码:
      public class global_asax:System.Web.HttpApplication
      {//代码}
该类成为ASP.global_asax,派生自HttpApplication类。在大多数情况下,我们会以单独的文本文件的形式来部署global.asax.当然我们也可以编写一个类,并将其编译在单独的程序集中或编译到项目的程序集中,该类的源码必须遵循上述代码的总体结构并必须派生自HttpApplication有global.asax编译版本的程序集必须部署在应用程序的bin目录下。需要注意的是,如果将global.asax文件的逻辑集中在编译的程序集中,我们仍需要一个没有程序代码的global.asax文件来应用该程序集,如下所示:
<%@ Application Inhericts="程序集名称" %>
这样做的好处是,可以再某种程度上避免通过web把程序的源代码暴露出去。
 
      global.asax文件的语法包括4个元素:应用程序指令、代码声明块、服务器端<object>标签和服务器端包括指令,这些元素的顺序是任意的,数目也不限。该文件支持@Application、@Import和@Assembly应用程序指令。@Application指令支持Description、Language、和Inherits几个属性。Description可以包含任何用于描述应用程序行为的文本,该文本只用于生成文本,不会被解析。Language属性用于指示当前文件使用的语言。Inherits属性用于指示该应用程序要继承的代码隐藏类,其值可以是任何继承于HttpApplication的类名称,包含该类的程序必须位于应用程序的bin目录下。@Assembly指令用于在编译时将程序集连接到应用程序。
      代码声明块由<script>标签包装,与页面一样,<script>标签必须有runat="server"属性。language指定主体部分的语言。源代码也可以从外部文件加载,使用Src属性设置虚拟路径即可。该文件的位置由Server.MapPath方法进行解析(指定的文件路径起始于Web应用程序的物理根目录下).
<script language="c#" runat="server" src="code.aspx.cs"/>在这种情况下,<script>块内部声明的任何代码都会被忽略。
      global.asax文件中定义的静态属性可以被应用程序中的所有页面读写:
      <script language="c#" runat="server" >
            public static int Counter=0;
      </script>
      要想在页面中访问该属性,我们必须使用ASP.global_asax限定符,如下所示:
      Response.Write(ASP.global_asax.Couter.Tostring());
      如果觉得ASP.global_asax限定符使用不够方便,则可以通过c#的语法为他起个别名,在访问全局变量的基于c#的页面(或代码隐藏类)中,添加以下代码即可:
using Global=ASP.global_asax;

posted @ 2009-09-05 19:46  坐看风起  阅读(1184)  评论(0编辑  收藏  举报