【发布时间】:2011-05-09 04:36:21
【问题描述】:
有大量关于导致 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% 的时间会失败。如果 Smith 先生访问该站点并尝试显示 4 条图像数据,则其中 2 条可能会保存在他的会话中,而其中 2 条可能会丢失。
史密斯先生的 InProc 会话对象存在。流量日志显示他点击了 4 次,每次都有不同的 id 参数。但是他的 InProc 会话对象中只有 2 个 guid,而不是 4 个。我们捕获的 2 个会话对象确实对应于流量日志中显示的 2 个 id(他的第一次和第三次点击)。他的第二次和第三次点击的流量日志但是,第 4 次单击显示了一个不在他的 InProc 会话对象中的 guid id。
上述代码的第 1 行和第 3 行显然适用于第 2 次和第 4 次点击,否则他在 URI 中没有 id 供他点击。然而,第 2 行似乎以某种方式默默地失败了。如果抛出任何异常,我希望我们永远不会到达第 3 行。我看不到用户接收 guid id 的任何方式,但会话无法获得它。另一种可能是第 2 行运行成功,但变量后来消失了,我什至无法想象。
谁能想到别的?或者可能是关于重现此类问题的方法的建议?
详情: ASP.NET v3.5 IIS 6 没有网络园艺 我们正在运行一个网络农场,但用户不断返回到同一台服务器。我现在正在研究是否有任何方式用户可能会溜到另一台服务器上。
【问题讨论】:
-
我会对那些溜到另一台服务器的人付出代价。过去看到过类似的事情,“粘性会话”并不总是像他们所说的那样!
-
考虑到高负载,您是否可能内存不足?你有没有介绍过这个?另外,您是否也在开发中经营一个农场?
-
是的。滑动式。我不是网络专家,我误解了全球站点选择器与内容切换器相比的功能。我们生活和学习。至于记忆,我确实深入挖掘过,很好的建议。