0

我正在努力解决以下问题。设置:

  • .NET 4 上的 ASP.NET 网络表单应用程序。
  • 状态服务的会话状态。
  • 三台网络服务器。这三个都托管 Web 应用程序。一个还充当 ARR 控制器。

网络服务器 1:Windows 2012。IIS 8。ASP.NET 状态服务。ARR 控制器。

网络服务器 2:Windows 2012。IIS 8。

网络服务器 3:Windows Server 2008R2。IIS 7.5。已安装 ASP.NET 4.5.2。

在服务器之间导航/切换时,Httpcontext.Session 为空:

HttpContext context = HttpContext.Current;
if (context.Session == null)
{
    CurrentLogger.Logger.Info("Context.Session is null");
}

如果我很幸运,并且请求重定向到同一台服务器,它会保留会话。

sessionState 服务器配置如下:

<sessionState mode="StateServer" stateConnectionString="tcpip=192.168.2.53:42424" cookieless="false" timeout="30" />

我还设置了机器密钥:

<machineKey validationKey="[xxxxx]" decryptionKey="[xxxx]" validation="SHA1" />

我要求我的所有 cookie 仅通过 SSL 发送。使用 IIS 日志记录我发现这不是问题。身份验证和会话 cookie 被发送到所有网络服务器。

什么可能导致我的会话在服务器之间为空?

4

1 回答 1

0

解决方案在这里找到:https ://stackoverflow.com/a/456238/167196 。

要跨 Web 场中的不同 Web 服务器维护会话状态,Microsoft Internet 信息服务 (IIS) 元数据库中网站的应用程序路径(例如 \LM\W3SVC\2)对于所有 Web 必须相同Web 场中的服务器。大小写也需要相同,因为应用程序路径区分大小写。

于 2016-02-16T14:56:24.150 回答