2

我对会话状态模式有基本的了解,我已经阅读了MSDN 上的这篇文章,但无法理解何时使用 InProc、StateServer 和 SqlServer 会话模式?更具体地说,混淆了何时使用状态服务器和何时使用 sqlserver?

4

1 回答 1

9

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

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

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

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

我的偏好通常是 StateServer。它很容易启动和运行,您可以拥有一个通用的,为许多不相关的环境(例如:dev、qa 等)保持状态。它不需要实际维护,并且非常容易设置。它也不需要许可证即可像 sql server 那样运行。但是,随着您对去中心化和安全性的需求增加,sql server 成为一个更加友好的选择。仅将 InProc 用于最基本的站点或流量有限的站点。

于 2014-07-09T12:45:02.563 回答