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 ,