2014-07-09 55 views
2

我对会话状态模式有基本的了解,我已经通过MSDN上的this article但无法理解何时使用InProc,StateServer和SqlServer会话模式?更具体地说,在何时使用状态服务器什么时候使用sqlserver?Inproc和Outproc会话状态模式

+0

我认为所提到的文章很好地解释了何时使用每种模式。究竟哪一部分你不明白? – haim770

回答

8

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

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

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

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

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

+3

StateServer也被称为'Outproc' –