当前位置:编程学习 > asp >>

Asp.net 内部对象Application

一、Application对象


Application简述
         在asp.net环境下,Application对象来自HttpApplictionStat类。它可以在多个请求、连接之间共享公用信息,也可以在各个请求连接之间充当信息传递的管道。使用Application对象来保存我们希望传递的变量。由于在整个应用程序生存周期中,Application对象都是有效的,所以在不同的页面中都可以对它进行存取,就像使用全局变量一样方便。如果用到多个用户之间的通信的时候,多用在网站计算器等,存活于整个应用程序运行周期static作用于应用程序整个运行周期。

 


Application的创建
[csharp] view plaincopyprint?
Application["application名称"] = "application的值"; 

Application["application名称"] = "application的值";Application的使用

[csharp] view plaincopyprint?
string str = Application["application名称"]; 

string str = Application["application名称"];

 

常用的属性和方法
All
 返回全部的Application对象变量到一个对象数组
 
AllKeys
 返回全部的Application对象变量到一个字符串数组
 
Count
 取得Application中对象变量的数量
 
Item
 Application变量名称传回的内容值
 
Add
 新增一个Application变量值
 
Clear
 清空全部Application变量值
 
Get
 变量名传回的变量值
 
Set
 更新Application变量值
 
Lock
 锁定所有Application变量值
 
UnLock
 解除锁定Application变量
 

 

Application对象特性:
存储的物理位置:服务器内存。

存储的类型限制:任意类型。

状态使用的范围:整个应用程序。

存储的大小限制:任意大小。

生命周期:应用程序开始的时候创建(准确来说是用户第一次请求某URL的时候创建),应用程序结束的时候销毁。

安全与性能:数据总是存储在服务端,安全性比较高,但不易存储过多数据。

优缺点与注意事项:检索数据速度快,但缺乏自我管理机制,数据不会自动释放。

 

 

二、应用程序生命周期


ASP.NET应用程序生命周期的几个阶段:

    1.用户从Web 服务器请求应用程序资源。

    2.ASP.NET接收对应用程序的第一个请求。

    3.为每个请求创建ASP.NET 核心对象。

    4.将HttpApplication 对象分配给请求。

    5.由HttpApplication 管线处理请求。

 


应用程序生命周期事件和 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
 在卸载应用程序之前对每个应用程序生命周期调用一次。
 

 

 

 

三、利用global.asax文件加Application对象实现简单的网站计数:
global.asax文件:

 

[csharp] 
<%@ Application Language="C#" %> 
 
<script runat="server"> 
 
    void Application_Start(object sender, EventArgs e)  
    { 
        // 在应用程序启动时运行的代码  
        Application["count"] = 0;//初始设置计数从0开始  
    } 
     
    void Application_End(object sender, EventArgs e)  
    { 
        //  在应用程序关闭时运行的代码  
 
    } 
         
    void Application_Error(object sender, EventArgs e)  
    {  
        // 在出现未处理的错误时运行的代码  
 
    } 
 
    void Session_Start(object sender, EventArgs e)  
    { 
        // 在新会话启动时运行的代码  
        Application.Lock();//同步,避免同时写入  
        Application["count"]=(int)Application["count"]+1;//没建立一个会话该全局变量加1  
        Application.UnLock();//同步结束  
 
    } 
 
    void Session_End(object sender, EventArgs e)  
    { 
        // 在会话结束时运行的代码。   
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 InProc 时,才会引发 Session_End 事件。  
        // 如果会话模式设置为 StateServer   
        // 或 SQLServer,则不会引发该事件。  
 
    } 
        
</script> 

<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
        Application["count"] = 0;//初始设置计数从0开始
    }
   
   

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,