Inproc和Outproc会话状态模式

F11*_*F11 2 c# asp.net session session-state inproc

我对会话状态模式有基本的了解,我已经在MSDN上看过这篇文章但是不能理解何时使用InProc,StateServer和SqlServer会话模式?更具体地说,何时使用状态服务器以及何时使用sqlserver?

Joe*_*ton 8

3种不同的模式有助于以不同的方式扩展您的状态,使您的应用程序在整个服务器场中更具可扩展性,并使其在自己的操作中更加健壮.

InProc
InProc是最基本的会话管理方案,其中会话存储附加到实际运行它的进程.这意味着它具有最快的响应时间,因为服务器不必转到备用源来获取所需的数据.虽然它在技术上是最快的,但它也是最弱的,因为它只能在运行网站的服务器上使用.它也容易出现内存转储.如果您的网站因任何原因崩溃,会话将与该流程一起转储.对于小而非常稳定的站点,InProc是完全可以接受的,甚至可能是理想的.InProc还具有能够在会话中保存任何内存对象的好处.如果您尝试抓住大量物体,这也可能会有问题.

StateServer
StateServer是指可以驻留在任何特定计算机上的ASP.Net状态服务器服务.它通常在端口42424上运行,可以为单台机器或许多机器提供服务.它的目的是比SQL服务器状态管理方法更快,但我认为速度的差异可以忽略不计.也许在非常大的企业环境中,差异变得明显,但对于我已经看到它的Web农场.StateServer要求会话中的任何对象都要Serializable正确存储和传输.这意味着不仅可以将任何对象放置在会话中,因此在构建类时还要提前计划.状态服务器可以位于您的网站所在的计算机上,也可以位于可通过42424端口访问的计算机上.这意味着会话数据与IIS进程分离,因此对崩溃和挂起"免疫".这允许您拥有使用公共状态服务器的服务器场,如果客户端不需要限制到特定服务器,则负载平衡变得简单.虽然状态服务器服务相当快,但它在一个端口上运行,许多网络管理员认为这只是入侵的另一个"攻击媒介".这导致了SQL状态服务器.

SqlServer SqlServer模式的操作与StateServer非常相似.对象必须是序列化的,sql server可以是本地的,也可以是远程的,使其不易在服务器场中发生单一服务器崩溃.网络管理员倾向于选择sql server进行状态管理,因为它们可以减少入侵向量.由于您的网站可能需要一个SQL服务器来执行数据访问,这只是小猪支持.Sql server还允许您可视地检查状态表中的内容.

我的偏好通常是StateServer.它很容易启动和运行,你可以拥有一个通用的,它可以保存许多不相关的环境(re:dev,qa等).它不需要实际维护,而且非常容易设置.它也不需要像sql server那样运行许可证.但是,随着您对分散和安全性的需求的增加,sql server变得更加友好.仅对最基本的站点或流量有限的站点使用InProc.

  • StateServer也称为"Outproc" (3认同)