繁体   English   中英

IIS ASP.NET InProc会话变量随机未写入会话

[英]IIS ASP.NET InProc session variables randomly not written to session

那里有大量有关导致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() + "\">");

这段代码非常简单,并且在Test中可以完美地工作。 但是,在生产中,在重负载下,它会失败约1%的时间。 如果史密斯先生访问该站点并尝试显示4个图像数据,则其中2个可能会保存在他的会话中,而其中2个则会丢失。

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

上面的代码的第1行和第3行显然适用于第2次和第4次点击,或者他在URI中没有ID可供他点击。 但是,第2行似乎以某种方式无声地失败了。 如果引发了任何异常,我希望我们永远不会到达第3行。我看不到用户接收guid id的任何方法,但是会话无法获得它。 另一种可能性是第2行成功运行,但是变量后来消失了,我什至无法想象。

谁能想到别的吗? 还是对解决此类问题的建议?

详细信息:ASP.NET v3.5 IIS 6没有Web园艺我们正在运行Web场,但是用户不断返回同一台服务器。 我现在正在研究是否有任何方式可能使用户滑到另一台服务器。

好了,找出问题是否归因于负载均衡器和粘性会话的一种简单方法是完全停止使用它,并查看问题是否重现。

如果无法实现,则可以将会话存储为进程外[状态服务器],然后再次检查会话。 我在Microsoft全球技术支持部门工作,并且看到很多情况下粘性会话不起作用!

http://aspalliance.com/1182

如果情况允许,您可以通过在服务器场中的每台服务器上使用相同的计算机密钥来绕开粘性会话的需求。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM