果园中的进程会话状态

out of process session state in orchard

我们在构建于 Orchard 之上的应用程序中使用默认会话状态(在 proc 中)。现在管理层决定在两者之间安装一个负载均衡器。为了让我们的会话仍然有效,我想使用进程外会话状态。但是,我有点困惑是否应该在我使用会话的特定模块的 'Orchard.web' 模块中启用它。

我正在尝试寻找 Orchard 是否以其他方式支持 proc 会话,或者它应该与普通 asp.net 应用程序所采用的方式类似。

如有任何帮助,我们将不胜感激

首先 - 我很确定 Orchard 团队建议不惜一切代价避免会话状态。任何具有会话状态的东西(根据定义)都是 有状态的,这使得向外扩展变得更加困难。但是,假设您无法避免它:

1) 这只是一个 ASP.NET 应用程序,适用正常规则。确保在应用程序配置中设置相同的机器密钥,配置您选择的会话状态机制(SQL/state 服务器)并在 web.config 中配置适当的值。

然而

2) 标准 ASP.NET 会话状态实现的锁定非常差。这可能会导致您的页面出现不良响应问题。在 session state performance 上查看这个优秀的问题(和链接的帖子)。您应该自己评估是否需要锁定会话状态。我们不得不完全删除会话状态,以便为我们的应用程序提供可接受的性能(而且我们从未回头或找到 session 优于 caching 因为

扩展的经典解决方案是使用粘性会话。大多数负载平衡器都有此设置,这将允许您继续使用 inproc 会话。如果您不打算自动缩放,那么您的 LB 后面总是有固定数量的服务器,那么这是一个您应该仔细考虑的解决方案。
退出 proc 可能会让您有些头疼,例如将您放入会话中的所有 类 标记为可序列化。