获取请求的页的HttpApplicationState 对象。
一、HttpApplicationState 类
作用:启用 ASP.NET 应用程序中多个会话和请求之间的全局信息共享。
ASP.NET 应用程序的概念:是单个 Web 服务器上的某个虚拟目录及其子目录范围内的所有文件、页、处理程序、模块和代码的总和。
HttpApplicationState 类的单个实例在客户端第一次从某个特定的 ASP.NET 应用程序虚拟目录中请求任何 URL 资源时创建。对于 Web 服务器上的每个 ASP.NET 应用程序都要创建一个单独的实例。然后通过内部 Application 对象公开对每个实例的引用。
Application对象是HttpApplicationState类的一个实例,它可以产生一个所有Web应用程序都可以存取的变量,这个变量的可以存取范围涵盖全部使用者,也就是说只要正在使用这个网页的程序都可以存取这个变量。
应用程序状态不在网络场(应用程序被多台服务器承载)或网络园(应用程序被同一台计算机上的多个进程承载)中共享。
二、HttpApplicationState 成员
HttpApplicationState 类型公开以下成员。
方法
属性
说明 | |
获取 HttpApplicationState 集合中的访问键。 | |
获取对 HttpApplicationState 对象的引用。 | |
获取 HttpApplicationState 集合中的对象数。 (重写 NameObjectCollectionBase..::.Count。) | |
获取或设置一个值,通过该值指示 NameObjectCollectionBase 实例是否为只读的。 (继承自 NameObjectCollectionBase。) | |
已重载。 获取对 HttpApplicationState 集合中的对象的访问。重载该属性以允许通过名称或数字索引访问对象。 | |
获取 NameObjectCollectionBase..::.KeysCollection 实例,该实例包含 NameObjectCollectionBase 实例中的所有键。 (继承自 NameObjectCollectionBase。) | |
获取由 <object> 标记声明的所有对象,其中范围设置为 ASP.NET 应用程序中的“Application”。 |
显式接口实现
说明 | |
从目标数组的指定索引处开始将整个 NameObjectCollectionBase 复制到兼容的一维 Array。 (继承自 NameObjectCollectionBase。) | |
获取一个值,该值指示对 NameObjectCollectionBase 对象的访问是否同步(线程安全)。 (继承自 NameObjectCollectionBase。) | |
获取一个对象,该对象可用于同步对 NameObjectCollectionBase 对象的访问。 (继承自 NameObjectCollectionBase。) |
三、Application应用
Application用于保存所有用户共用的数据信息。在ASP中,如果被保存的数据在应用程序的生存期中根本不会改变或者很少改变,那么使用Application对象保存是理想的选择。但是在ASP.NET中类似的配置数据最好保存在Web.config文件中。如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件(global.aspx)中完成。尽管使用Application.Lock和Application.Unlock方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈。因此最好不要用此对象保存大的数据集。
使用Application对象保存信息的代码如下:
在Global.asax文件中
protected void Application_Start(Object sender, EventArgs e)
{
Application["zxrs"]=0;
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["zxrs"] =(Int32)Application["zxrs"]+1;
Application.UnLock();
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["zxrs"] =(Int32)Application["zxrs"]-1;
Application.UnLock();
}
注:计算出的在线人数在一定时间段内是准确的,如果要获取精确的在线人数,可以将登录信息存储在后台数据库中或者读取当前会话集中对象的数量。