1

我们的服务器偶尔会出现一个奇怪的问题。它通常发生在我们的一个或多个 Web 应用程序升级时。调试问题让我走到了这一步……

在处理请求期间:

  • 在 ASP.NET 应用程序中,我们将一个对象放入会话中
  • 在稍后运行的代码(相同的请求)中,我们查找相同的会话值。它是空的!

所以看起来会话服务不起作用,对吧?该代码每天运行数百次,在开发环境或生产环境中从未失败,仅与升级 Web 服务器上的 Web 应用程序有关。

奇怪的是:我们也没有真正喜欢解决问题的适当方法。IIS 重置、ASP.NET 状态服务器停止/启动、web.config 编辑,甚至服务器重新启动都使用了所有 bin - 通常需要组合来修复它 + 加上大量的咒骂和拉扯。而且在大多数情况下,它不会立即修复,但可能在第三次 IIS 重置或其他任何情况两三分钟。(所以它可能毕竟不是修复它的原因。)

我要疯了。任何想法可能是什么问题?是微软的bug吗?

更多信息:

  • 我们在 .NET 2.0 下运行
  • 我们正在使用 ASP.NET 状态服务
  • 访问会话变量并返回 null 的代码位于 ASP.NET 应用程序引用的程序集中。它使用 HttpContect.Current 来获取会话
4

2 回答 2

2

HttpContext.Items 仅在请求的生命周期内可用,而不是在整个会话期间可用,因此需要考虑。

要回答原来的问题,

  1. 当您将项目添加到会话时,您可以在下一行成功检索它吗?

  2. 它是特定于服务器的吗?即一台服务器可以看到会话中的值,但不能看到另一台服务器?

  3. 尝试访问变量的 dll 是否存在平台目标差异,例如 .net 1.1 与 .net 2.0?

于 2008-10-01T11:29:52.353 回答
0

您可以考虑不使用会话变量吗?

如果您需要同一会话中的数据,则可以使用 HttpContext.Items ,它比使用会话变量轻得多。

回答您的问题:当您第一次访问会话时,可能尚未创建会话。如果不存在,它将抛出异常。

检查

If Not IsNothing(Context.Session) Then
    'do something
end if
于 2008-10-01T11:09:11.780 回答