多服务器设置中的'进程内'会话状态模式?

时间:2013-08-13 20:31:21

标签: asp.net session state mode inproc

我的团队正在多服务器设置中使用“进程内”会话状态模式。这对我来说似乎不对,因为会话状态在每台服务器上都是唯一的,不会被共享。

我们通过在两台服务器上提供相同的机器密钥(在应用程序的配置文件中)来解决这个问题。但我觉得这实际上没有帮助......

对此表示赞赏。

谢谢!

2 个答案:

答案 0 :(得分:8)

当使用InProc会话状态时,会话将本地存储在服务于请求的服务器上,因此在两台服务器上使用相同的机器密钥将无法实现此目的。

此选项不适合在Web场环境中使用。一台农场机器存储会话状态而不存储另一台农场机器。来自同一用户的后续Web请求可能无法读取正确的会话状态。

考虑一个非常常见的情况:

  

想象一下,Web请求被路由到服务器场A,并且请求调用的代码依赖于存储在会话中的一些参数。如果同一个用户在下一个Web请求中路由到机器B,该请求也依赖于会话状态,那么结果将是不可预测的。

有一种叫做 StickySessions 的东西可以解决上面的问题。 但这真的很好吗?

  

此功能表示如果客户端返回第二个请求,则负载均衡器会将该流量重定向到同一个Web服务器。它也称为客户端亲和力。这对于在本地存储会话状态的Web服务器很重要,这样当相同的访问者返回时,我们不希望与该用户相关的状态不可用,因为请求被路由到不同的Web服务器。

这绝对胜过了Web场中负载平衡的目的。我们应该避免这种解决方案,以便负载均衡器可以根据当前负载选择场中的“正确”机器。

请阅读此处以获得完整的理解:http://dotnetcodr.com/2013/07/01/web-farms-in-net-and-iis-part-5-session-state-management/

答案 1 :(得分:0)

您可以使用AppFabric会话状态来管理分布式会话

http://msdn.microsoft.com/en-us/library/hh361709(v=azure.10).aspx