【问题标题】:Inproc and Outproc session state modesInproc 和 Outproc 会话状态模式
【发布时间】:2014-08-30 11:30:37
【问题描述】:

我对会话状态模式有基本的了解,我浏览过 MSDN 上的 this article,但无法理解何时使用 InProc、StateServer 和 SqlServer 会话模式?更具体地说,混淆了何时使用状态服务器和何时使用sqlserver?

【问题讨论】:

  • 我认为上面提到的文章很好地解释了何时使用每种模式。你到底不明白哪一部分?

标签: c# asp.net session session-state inproc


【解决方案1】:

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

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

状态服务器
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 用于最基本的站点或流量有限的站点。

【讨论】:

  • StateServer 也称为Outproc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 2012-01-31
相关资源
最近更新 更多