使用Interfaces ASP.Net Cluster Environment执行foreach循环时的空引用

时间:2009-03-24 19:54:24

标签: c# asp.net interface foreach

当控件创建它的子控件时,我在Web控件中有一个List我在字段列表中执行foreach循环

foreach (IField field in this._fields)
{
   /* Do some work here */
}

Localhost,out dev环境和我们的暂存环境一切都很好。但是当我们部署到我们的开发集群时,每个“字段”在循环期间都为空。什么会导致这些对象为空?当我从另一个数据列表加载此列表时,一切都正常加载,并且该数据不为空。

2 个答案:

答案 0 :(得分:2)

确保您没有在应用中使用应用级缓存来存储IField的内容,因为它不会在群集中的服务器之间进行复制。

如果您正在使用会话缓存,请再次确保在群集中运行时它会持久保存到SQL Server。如果它是进程内会话高速缓存,则它对于集群中的每个服务器都是唯一的(与应用程序高速缓存类似)。

答案 1 :(得分:0)

首先检查:你如何获得这些字段集合?你在沿途的某个地方做一些IField吗?如果它没有实现IField,那将有效地给出null。

如果不是上述情况,那将是一个非常奇怪的情况。唯一想到的是,我在其他提供商开发的应用程序中的一些清晰代码中看到了非常糟糕的东西:

void Clear()
{
    //some normal code to clear info on some controls
    myTextBox = null;
    anotherTextBox = null;
}

虽然这样做没有意义,但它实际上会给asp.net带来麻烦。在某些特定的回发场景中,asp.net在其生命周期的某些内部部分的一部分中失败并出现nullreferenceexception。

因此,还要检查是否有一些奇怪的例程将null分配给页面上声明的控件。