我无法让 2 个相同的 ASP.NET MVC 应用程序使用 Session StateServer 共享相同的 Session。我尝试这样做的原因是我们最终将在需要共享相同状态的 3 个 Web 服务器上部署此应用程序。我们需要使用 StateServer,因为我们试图将 db 用于非数据相关存储的最小化。
设置:
我已经将相同的代码库部署到http://localhost/ App1和http://localhost/ App2
两者都有相同的 Web.Config 文件,内容如下:
<system.web>
<sessionState mode="StateServer"
cookieless="false"
timeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
//stateConnectionString="tcpip=192.168.1.52:42424" /> // also doesn't work
<machineKey
validationKey="8B9F68D0CC730F6F046D0173021C34B1A0D9A01C21D8E4D4A7A1DFF38332DEE8CBBAFEA503C18776614EE9D4F7EEA7E5D2D5571630547D822485A27B1EF53AC1"
decryptionKey="60009563EFCFC594FD1BC46684943AA398EE70412A624B2EB488BBB071F15ECF"
validation="SHA1" decryption="AES" />
考试:
我将以下内容放入我的一个控制器中以测试它是否正常工作:
ViewData["mode"] = requestContext.HttpContext.Session.Mode.ToString();
string timestamp = DateTime.Now.ToString();
if (requestContext.HttpContext.Session["timestamp"] == null)
{
requestContext.HttpContext.Session["timestamp"] = timestamp;
}
ViewData["timestamp"] = requestContext.HttpContext.Session["timestamp"].ToString();
ViewData["realtime"] = timestamp;
考虑到这一点:
<p>
Mode: <%= ViewData["mode"].ToString() %>
</p>
<p>
Time: <%= ViewData["timestamp"].ToString() %>
</p>
<p>
real time: <%= ViewData["realtime"].ToString() %>
</p>
结果:
对于这两种部署,当页面首次加载时,我可以看到模式是 StateServer 并且时间戳设置为与实时值相同的时间。但是,如果这有效,则只有第一页应该与实时值。第二个页面加载应从 StateServer 读取,因为该时间戳值不再为空,并显示该时间值。但相反,它再次显示实时值。
当我刷新页面时,时间戳保持不变,实时值始终在更新。这表明时间戳正在保存到 Session,但两个部署的时间戳值在应该相同时总是不同的,因此这表明 Session 没有被共享。
有人可以指出我做错了什么,或者我需要做些什么才能让它工作吗?谢谢