那里有很多有关导致inproc会话删除会话对象的事物的信息,但这不是这里发生的事情。我们缺少稳定的INPROC会话对象中的单个变量,并且不确定成功写入后是否没有编写或丢失。我已经用windbg确认会议是现场直播的,并且包含一些但不是全部写给他们的数据。

Guid g = System.Guid.NewGuid();
this.Context.Session.Add(g.ToString(), result.ImageData);           
output.Write("<img src=\"display.aspx?id=" + g.ToString() + "\">");

该代码非常简单,并且在测试中完美无缺。在生产中,在沉重的负载下,它的时间约为1%。如果史密斯先生访问该网站并试图显示4张图像数据,则其中2个可能会保存在他的会议中,其中两个丢失了。

史密斯先生的inProc会议对象存在。流量日志显示他单击了4次,每个人都有不同的ID参数。但是他的InProc会话对象中只有2个GUID,而不是4。我们确实捕获的2个会话对象确实对应于流量日志中显示的2个ID(他的第1和第3个点击。)但是,第四次点击显示了一个不在他的InProc会话对象中的GUID ID。

上述代码的第1和3行显然可以在第二和第四次点击中工作,或者他没有在URI中使用ID供他点击。但是,第2行似乎以某种方式默默失败。如果抛出任何例外,我希望我们不会到达第3行。我看不到用户可以接收GUID ID的任何方法,但是会话无法获得。另一种可能性是第2行成功工作,但是变量后来消失了,我什至无法想象。

谁能想到其他任何东西?还是关于重复此类问题的方法的建议?

详细信息:ASP.NET v3.5 IIS 6没有网络园艺我们正在运行一个网络农场,但是用户不断返回同一家服务器。我现在正在研究用户是否有任何办法滑向另一台服务器。

有帮助吗?

解决方案

好吧,一种简单的方法来确定问题是否是因为负载平衡器和粘性会话是完全停止使用它,并查看问题是否复制。

如果不可能,您可以将会话存储在进程[状态服务器]中,然后再次检查会话。我曾在Microsoft全球技术支持中工作,并且看到了许多粘性会话不起作用的情况!

http://aspalliance.com/1182

其他提示

如果可能的话,您可以通过在农场中的每个服务器上使用相同的机器密钥来绕开粘性会话的需求。

http://www.asp101.com/tips/index.asp?id=165

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top