4

一位前雇员实现了一个自定义 VB.Net Context 类,该类继承 DictionaryBase 并实现 ILogicalThreadAffinitive。类对象在使用 .NET 4 Framework 的 ASP.NET Web 应用程序中的整个用户会话中维护用户 ID、语言、位置等值。

<Serializable()> _
Public NotInheritable Class Context
    Inherits DictionaryBase
    Implements ILogicalThreadAffinative

    ... Class Methods ...

End Class

对象类似乎工作正常,在页面之间导航时按预期保存值,即使在加载弹出页面时也是如此。每当我有 PostBack 操作时,我的问题就会出现。发生这种情况时,对象变为空并导致空引用错误。

奇怪的是,它适用于除我之外的所有人。它安装在我们客户端的系统上,在我们的测试环境中运行,并为我们项目中的其他开发人员工作,但是有一些东西阻止它在我的开发环境中工作,该环境使用本地 IIS 7.0 Web 服务器托管应用程序。另一位开发人员和我已经交叉检查了我们可能会更改的所有本地 IIS 设置、VS2010 设置和互联网选项,但两台机器之间的一切似乎都是相同的(都是 Win7 x64,以 x86 模式构建应用程序) . 不用说,这个问题对于开发和故障排除问题已经变得非常困难。

是否有任何建议可以检查可能产生这种行为的其他内容?

编辑:经过一些更高级的挖掘后,似乎 PostBack 导致请求在第二个线程上触发。尽管文档似乎说了什么,第二个线程并没有继承 CallContext 中的值。在我同事的工作环境中,这个请求是在同一个线程上处理的。这似乎是问题的主要症状,但我们仍然无法查明根源。另外,也许值得注意的是:我的机器有一个 SSD,而其他开发人员没有。我不知道这是否会影响线程,但我认为它不会产生这些结果。

4

1 回答 1

0

我对解决方案不是特别满意,但是通过切换到 ASP.NET v4 经典应用程序池,我能够无错误地运行程序。如前所述,我同事的机器使用集成应用程序池运行程序很好。然而,在我的机器上,这会导致线程问题。

因此,本身并不是一个令人满意的“答案”;但我有一个解决方案,尽管如此。

于 2013-02-07T15:59:08.227 回答