我有一个ASP.NET 3.5 webforms应用程序,它位于两个Web服务器(IIS)上,并通过具有粘性亲和力的内容交换机进行负载平衡。我有一个页面将数据放入会话变量,javascript打开一个新的浏览器窗口,并在该页面的page_load事件中,我检索该会话变量并显示数据。
问题是在IE的所有版本中,大约7次中有7次没有显示数据。如果我继续刷新新打开的窗口,它最终将显示数据。我可以验证在打开浏览器窗口之前,会话变量是有效的。
另一个问题是firefox没有这个问题。数据在第一次显示的时间为100%。问题是我们没有(正式)支持firefox。
我们无法访问任何第三方数据存储区,例如MSSQL或MySQL,因此存储会话数据不是一种选择。此外,缓存数据客户端的能力是不实际的,在某些情况下不是一种选择。
这不会发生在本地或我们的测试环境中(没有负载平衡),所以我真的很困惑。任何帮助将不胜感激。
感谢。
答案 0 :(得分:3)
您使用的会话商店提供商是什么? InProc,StateServer? 听起来就像你在使用InProc一样。如果是这样,由于您无权访问数据库,因此切换到StateServer可能就是您的答案。
这是一篇关于ASP.NET load balancing and ASP.NET state server的文章,可能会对您有所帮助。
答案 1 :(得分:1)
您提到您正在使用粘性会话/关联。您是否可以确认您的负载均衡器正在查看HTTP cookie(不仅仅是IP地址)以确定粘性,因为IP地址可以在单个会话期间发生变化(例如,在有线和无线网络之间停靠笔记本电脑)。