ASP.NET会话丢失但仅针对一个特定用户

时间:2010-07-08 21:54:28

标签: asp.net session nullreferenceexception web-farm

我有一个在两个负载平衡服务器上运行的ASP.NET应用程序。除了一组客户外,一切正常。所有这些客户都来自同一家公司。随机地,抛出一个未处理的NullReferenceException错误。它随机发生在随机的地方。似乎会议刚刚完全消失。因为这只发生在特定的一组用户身上,我必须假设这与他们的环境有关。我见过用户使用IE6,IE7,IE8和FF,并且在所有情况下都会出现错误。

我不是100%确定如何排除故障。有没有人有任何想法?

编辑:会话设置为“InProc”

<sessionState mode="InProc" cookieless="false" timeout="20" />

4 个答案:

答案 0 :(得分:1)

InProc会话不在服务器之间共享,因此听起来这组用户正在从一台服务器移动到另一台服务器,而其他用户则没有。也许您的负载均衡器正在尝试使用IP地址或其他类似的东西来实现粘性会话,并且该组织正在阻止该信息。

答案 1 :(得分:1)

答案 2 :(得分:0)

如果您使用SQL来存储会话状态,请检查服务器场中的所有服务器是否正在查看相同的SQL数据库 - 之前我已经被这个问题所困扰,并且花了很长时间来解决它!

修改: 实际上,当您在Web场中运行时,可能需要将其设置为StateServer。 请参阅MSDN中的Session-State Modes

答案 3 :(得分:0)

如果您的负载平衡基于将每次点击指向最不忙的服务器,那么InProc将不起作用。您需要使用StateServer或SQLServer模式。

想象一下,客户端的第一个命中是指向服务器A - 它在服务器A上启动一个新会话。来自同一客户端的第二个命中可以转到服务器B,从服务器A提供会话cookie,服务器B没有'认识。

如果你有'sticky'(或客户端亲和力)负载平衡,第一次点击被分配给最不忙的服务器,但随后来自同一会话的点击被定向到同一个服务器,那么InProc应该仍然可以工作