我对会话状态模式有基本的了解,我已经通过MSDN上的this article但是无法理解何时使用InProc,StateServer和SqlServer会话模式?更具体地说,何时使用状态服务器和何时使用状态服务器使用sqlserver?
答案 0 :(得分:8)
3种不同的模式有助于以不同的方式扩展您的状态,使您的应用程序在整个服务器场中更具可扩展性,并使其在自己的操作中更加强大。
<强>是InProc 强>
InProc是最基本的会话管理方案,其中会话存储附加到实际运行它的进程。这意味着它具有最快的响应时间,因为服务器不必转到备用源来获取所需的数据。虽然它在技术上是最快的,但它也是最弱的,因为它只能在运行网站的服务器上使用。它也容易出现内存转储。如果您的网站因任何原因崩溃,会话将与该流程一起转储。对于小而非常稳定的站点,InProc是完全可以接受的,甚至可能是理想的。 InProc还具有能够在会话中保存任何内存对象的好处。如果你试图抓住巨大的物体,这也可能会有问题。
<强>的StateServer 强>
StateServer是指可以驻留在任何特定计算机上的ASP.Net状态服务器服务。它通常在端口42424上运行,可以为单台机器或许多机器提供服务。它的目的是比SQL服务器状态管理方法更快,但我认为速度的差异可以忽略不计。也许在非常大的企业环境中,差异变得明显,但对于网络农场,我发现它并非如此。 StateServer要求会话中的任何对象都为Serializable
,以便正确存储和传输。这意味着不仅可以将任何对象放置在会话中,因此在构建类时还要提前计划。状态服务器可以位于您的网站所在的计算机上,也可以位于可通过42424端口访问的计算机上。这意味着会话数据与IIS进程分离,因此免受&#34;免疫&#34;崩溃和挂起。这允许您拥有使用公共状态服务器的服务器场,如果客户端不需要限制到特定服务器,则负载平衡变得简单。虽然状态服务器服务相当快,但它在一个端口上运行,许多网络管理员认为该端口只是另一个&#34;攻击媒介&#34;因为入侵。这导致了SQL状态服务器。
<强> SqlServer的强> SqlServer模式的运行方式与StateServer非常相似。对象必须是序列化的,sql server可以是本地的,也可以是远程的,使其不易在服务器场中发生单一服务器崩溃。网络管理员倾向于选择sql server进行状态管理,因为它们可以减少入侵向量。由于您的网站可能需要一个SQL服务器来执行数据访问,这只是小猪背。 Sql server还允许您可视地检查状态表中的内容。
我的偏好通常是StateServer。它很容易启动和运行,你可以拥有一个通用的,它可以保存许多不相关的环境(re:dev,qa等)。它不需要实际维护,而且非常容易设置。它也不需要像sql server那样运行许可证。但是,随着您对分散和安全性的需求的增加,sql server变得更加友好。仅对最基本的网站或流量有限的网站使用InProc。