C# 使用ASP.Net群集环境接口执行foreach循环时引用为空

C# 使用ASP.Net群集环境接口执行foreach循环时引用为空,c#,asp.net,interface,foreach,C#,Asp.net,Interface,Foreach,我在web控件中有一个列表,当控件创建它的子控件时,我通过字段列表执行foreach循环,如下所示: foreach (IField field in this._fields) { /* Do some work here */ } Localhost、out-dev环境和我们的登台环境一切正常。但是,当我们部署到dev集群时,在循环过程中,每个“字段”都是空的。什么会导致这些对象为空?当我从另一个数据列表加载此列表时,所有内容都会正常加载,并且该数据不为空。首先检查:如何获取这些字段

我在web控件中有一个列表,当控件创建它的子控件时,我通过字段列表执行foreach循环,如下所示:

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

Localhost、out-dev环境和我们的登台环境一切正常。但是,当我们部署到dev集群时,在循环过程中,每个“字段”都是空的。什么会导致这些对象为空?当我从另一个数据列表加载此列表时,所有内容都会正常加载,并且该数据不为空。

首先检查:如何获取这些字段集合?你是不是在沿途的某个地方做一些我所知道的事情?如果它不实现IField,将有效地给出null

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

void Clear()
{
    //some normal code to clear info on some controls
    myTextBox = null;
    anotherTextBox = null;
}
虽然这样做没有意义,但实际上会给asp.net带来麻烦。在某些特定的回发场景中,asp.net在其生命周期的某些内部部分出现nullreferenceexception失败


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

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


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

好吧,您还没有显示这是什么。\u字段。显然,它被初始化为一堆空引用,但我们需要更多的信息,比如什么代码初始化它。