[ASP.NET]状态管理

        HTTP是一种无状态的协议,因此在不同请求之间无法共享状态,然而维护不同请求之间的状态是很有用的。比如购物网站中购物车的实现就要依赖这种状态实现。

       应用程序状态管理

想必很多人对下面的代码段很熟悉:

Application.Lock();
Application["MyGlobalCounter"] =
(int)Application["MyGlobalCounter"] + 1;
Application.UnLock();
Application是HttpApplicationState类的一个实例。
它存在于一个Web应用程序的整个生命周期中。
 
会话状态
在浏览器中第一次请求一个应用程序时,服务器会开启一个会话,
以后的请求都会共享这些会话状态。
这批请求的第一个响应会返回一个SessionID,
以后都会用这个SessionID做为Token访问这次会话的状态。
SessionID的传递方式有两种:
1)Cookie
2)不使用Cookie,而是被插入到URL中传递到服务端。
ASP.NET 支持三种会话状态模式:InProc,StateServer,SQLServer.
  优点 缺点
InProc 1)从aspnet_wp.exe中直接读取,因此性能最好。

1)aspnet_wp.exe可能会由于多种原因,(比如虚拟目录中的web.config,Bin目录或者内存使用量达到最大里了)被回收。因此具有相当大的不稳定性。
2)不适用于Web Garden部署,更不适用于Web Farm部署。
StateServer 1)这种模式下的会话变量存储在一个Windows服务中,独立于IIS,因此不会受IIS工作进程回收机制的影响。
2)适用于Web Garden和Web Farm两种部署模式。
1)存在跨进程或跨机器(因为可以把这个Windows服务部署在另一个服务器上)问题,性能较低。
SQLServer 除拥有StateServer模式的1),2)优点外,还有以下优点:
3)更持久
1)性能更低,因为要读SQL Server,反序列等等。

 

参考资料:http://msdn.microsoft.com/en-us/library/87069683(VS.71).aspx

posted on 2010-03-29 22:42  James.H.Fu  阅读(1584)  评论(5编辑  收藏  举报

导航