前员工实现了一个自定义的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行动。发生这种情况时,对象变为null并导致空引用错误。
奇怪的是,它适用于除我以外的所有人。它安装在我们客户的系统上,在我们的测试环境中运行,并且适用于我们项目上的其他开发人员,但是有些东西阻止它在我的开发环境中工作,该开发环境使用本地IIS 7.0 Web服务器托管应用程序。另一位开发人员和我已经交叉检查了我们本来会改变的所有本地IIS设置,VS2010设置和互联网选项,但两台机器之间的一切看起来都是相同的(Win7 x64,在x86模式下构建应用程序) 。毋庸置疑,这个问题对于开发和故障排除问题已经变得非常严重。
是否有任何建议可以检查可能产生此类行为的其他内容?
编辑:经过一些更高级的挖掘后,看起来PostBack导致请求在第二个线程上触发。尽管文档似乎说过,但是第二个线程并没有继承CallContext中的值。在我同事的工作环境中,此请求在同一个线程上处理。这似乎是问题的主要症状,但我们仍然无法查明来源。另外,也许值得注意的是:我的机器有一个SSD而另一个开发者没有。我不知道这是否会影响线程,但我认为不会产生这些结果。
答案 0 :(得分:0)
我对解决方案并不是特别满意,但是通过切换到ASP.NET v4 Classic Application Pool,我能够无错误地运行程序。如前所述,我的同事的机器正在使用集成应用程序池运行该程序。但是,在我的机器上,这会导致线程问题。
所以,本身并不是一个令人满意的“答案”;但是我有一个解决方案。