在我刚刚放在那里的会话中找不到的东西(但有时只是)

时间:2008-10-01 11:03:08

标签: asp.net session

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

在处理请求期间:

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

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

奇怪的是:我们还没有真正喜欢纠正这种情况的正确方法。 IIS重置,ASP.NET状态服务器停止/启动,web.config编辑,甚至服务器重新启动都使用了所有bin - 通常需要一个组合来修复它+加上大量的咒骂和拉扯。并且在大多数情况下,它不会立即修复,但在第三次重置IIS之后可能需要两到三分钟。 (所以它可能不是解决它的原因。)

我在这里疯了。任何想法可能是什么问题?这是一个微软的bug吗?

更多信息:

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

2 个答案:

答案 0 :(得分:2)

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

回答原来的问题,

  1. 将项目添加到会话时可以     你在中成功检索它     下一行?

  2. 是服务器特定的吗?     即一个服务器可以看到值     会议但不是其他会议?

  3. dll     那是试图访问     变量,有没有平台     它的目标差异,例如.e.g。     .net 1.1 vs .net 2.0?

答案 1 :(得分:0)

你能考虑不使用会话变量吗?

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

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

检查

If Not IsNothing(Context.Session) Then
    'do something
end if