asp.net asax文件使用与计数器实例

application对象(httpapplicationstate 类型,译者按:application对象是httpapplication类的一个属性,是web应用程序全局唯一的,web应用程序第一次有请求进来的时候创建的) 是我们在web应用程序内保存全局信息的地方,application对象是一个很方便的保存全局信息的地方,例如保存数据库教程的连接字符串:

 private void page_load(object sender, system.eventargs e)

{

  string connectionstring = application["connectionstring"].tostring();

  . . . 

}

 

你也可以在httpapplication类中声明静态成员变量来保存应用程序状态信息,例如,上例中的数据库连接字符串可以用如下方式保存。

public class global : system.web.httpapplication

{

  public static readonly string connectionstring = "connection information";

   . . .   

}

可以在asp教程.net代码的任何地方访问该静态成员变量,例如:string connectionstring = global.connectionstring;

非常重要的一点是,如果你想让该字符串可以全局范围内被访问到,则该字符串必须声明为静态成员变量(你也可以创建一个静态的属性)。

相反,如果你在global类型使用一般成员变量(非静态),则只能用来保存请求状态,举个例子来说明,下面的代码将在调试窗口中输出所有请求的处理时间(毫秒)

public class global : system.web.httpapplication

{

       protected datetime beginrequesttime;

       protected void application_beginrequest(object sender, eventargs e)

       {

              beginrequesttime = datetime.now;

       }

       protected void application_endrequest(object sender, eventargs e)

       {

              string messageformat = "elaps教程ed request time (ms) = {0}";

              timespan difftime = datetime.now - beginrequesttime;

              trace.writeline(

                     string.format(messageformat, difftime.totalmilliseconds       ) );                  

       }

       . . .

}

 好,现在让我们回到上面关于保存应用程序状态的话题。那个方法更好的呢:在application对象中保存对象的引用,还是在global类中声明静态成员或属性?各种方式各有优劣。在global类中保存全局静态成员可以使你的数据访问具有强类型,不象application对象,你不需要进行类型转换,下面的代码说明了它们的区别:
dataset cacheddata = (dataset)application[“mydataset”];

string mystring = application[“mystring”].tostring();

 

dataset cacheddata = global.mydataset;

string mystring  = global.mystring;

 

  强类型使你的的代码更加清晰和强壮,在应用程序性能要求比较高的情况下,这种方式可以避免运行时类型转换带来的性能损失。如果你保存的是值类型的数据,强类型还可以避免装箱(boxing)和卸箱(unboxing)所带来的性能损失。另外,application对象还有因为线程同步造成的锁定所带来的性能上问题。如果你的全局数据只初始化一次,再也不会改变,使用global类中的静态成员可以避免锁定带来的性能损失。但,如果你采用了这种方式,强烈推荐你使用访问器(属性),以保证该变量是只读的。如果你既要读又要写在global类中的静态成员变量,记住要保证线程安全。application对象通过获取读写锁已经内在的提供了线程安全保证。

看一下利用asax文件做网站计数器

添加了global.asax,app_code文件夹下global.asax.cs,文本文件site_counter.txt并写入数字0,代码分别如下:

global.asax

<%@ application inherits="linker.global" language="c#" %>
global.asax.cs

using system;
using system.data;
using system.configuration;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.io;

namespace linker
...{
    /**//// <summary>
    /// global 的摘要说明
    /// </summary>
    public class global : httpapplication
    ...{
        public global()
        ...{
            //
            // todo: 在此处添加构造函数逻辑
            //
         }
        protected void application_start(object sender, eventargs e)
        ...{
            // 在应用程序启动时运行的代码
             streamreader rd = new streamreader(server.mappath("site_counter.txt"));
             application.lock();
             application["site_counter"] = int.parse(rd.readline());
             application.unlock();
             rd.close();
         }
        protected void session_start(object sender, eventargs e)
        ...{
            // 在新会话启动时运行的代码
             application.lock();
             application["site_counter"] = convert.toint32(application["site_counter"]) + 1;
             application.unlock();

             streamwriter wt = new streamwriter(server.mappath("site_counter.txt"), false);
             application.lock();
             wt.writeline(application["site_counter"]);
             application.unlock();
             wt.close();
         }
     }
}
然后在需要显示的页面显示系统 就可以了

比如简单的:

label_site_counter.text = convert.tostring(application["site_counter"]);

时间: 2024-11-13 08:35:35

asp.net asax文件使用与计数器实例的相关文章

Asp无组件文件上传的实例

上传|无组件 1.库文件(upload.inc.asp)<%Dim oUpFileStream Class UpFile_Class Dim Form,File,Version,Err Private Sub Class_InitializeVersion = "无组件上传类 Version V1.0"Err = -1End Sub Private Sub Class_Terminate '清除变量及对像If Err < 0 ThenForm.RemoveAllSet Fo

ASP JSON类文件的使用方法

而且要使用某个节点的时候要好好的分析,节点的路径一级级的定位.而JSON最大的好处就是,在使用时候可以只需要将数据字符串声明为一个对象,就可以很方便的调用对象中的各成员.也方便在客户端使用Javascript直接调用程序端生成的数据字符串. 使用ASP的人都知道,ASP可以使用两种类型的脚本引擎,那就是VBSCRIPT和JSCRIPT.偶当初学习的时候就根本不知道JSCRIPT,如果知道的话我想我现在就没有必要这么麻烦的将JSON数据使用JSCRIPT转换后,才能在VBSCRIPT中使用.还好两

ASP JSON类文件的使用方法_应用技巧

而且要使用某个节点的时候要好好的分析,节点的路径一级级的定位.而JSON最大的好处就是,在使用时候可以只需要将数据字符串声明为一个对象,就可以很方便的调用对象中的各成员.也方便在客户端使用Javascript直接调用程序端生成的数据字符串. 使用ASP的人都知道,ASP可以使用两种类型的脚本引擎,那就是VBSCRIPT和JSCRIPT.偶当初学习的时候就根本不知道JSCRIPT,如果知道的话我想我现在就没有必要这么麻烦的将JSON数据使用JSCRIPT转换后,才能在VBSCRIPT中使用.还好两

使用ASP.NET Global.asax 文件

asp.net Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题--当然是在你没有使用它的情况下..asax 文

ASP.NET中Global.asax文件的使用

Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题--当然是在你没有使用它的情况下..asax 文件扩展名指出它是

ASP.NET中使用Global.asax文件

  Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题--当然是在你没有使用它的情况下..asax 文件扩展名指出

asp.net Global.asax文件与HttpApplication详解

Global.asax 文件继承自HttpApplication 类,它维护一个HttpApplication 对象池,并在需要时将对象池中的对象分配给应用程序.Global.asax 文件包含以下事件:     ·Application_Init:在应用程序被实例化或第一次被调用时,该事件被触发.对于所有的HttpApplication 对象实例,它都会被调用.     ·Application_Disposed:在应用程序被销毁之前触发.这是清除以前所用资源的理想位置.     ·Appli

开源-asp.net生成的网页内容,怎么只有一个Global.asax文件,没有其他的启动文件呢

问题描述 asp.net生成的网页内容,怎么只有一个Global.asax文件,没有其他的启动文件呢 因为是开源的项目,我在IIS里把Global.asax设置成默认文档了,启动时还是提示我没有建立对应的映射,不设置呢,打开页面时又提示"没有为请求的 URL 配置默认文档,并且没有在服务器上启用目录浏览",这种状况要如何设置,或者说设置哪个文件为启动文件,好能正确打开页面? Global.asax内容为下: <%@ Application Codebehind="Glo

利用ASP输出excel文件实例讲解_应用技巧

在asp中利用excel的一个方法是将excel文件作为一个数据库进行链接,然后的操作和对access数据库操作类似.但是这个方法不是总能有用的,应为excel不是关系型的数据库.对于一个固定格式,这个格式里有复杂的单元格合并,边框线条样式,还有图案,单元格之间还有公式关系等等的,我想最容易理解的就是在后台打开一个已有设定好模板的文件,然后在需要的地方插入数据,保存,输出... ... 这里提到的这种方法是直接建立一个excel对象,在后台可以更方便的对excel文档进行各种操作. 服务器端还必