当控件创建它的子控件时,我在 Web 控件中有一个列表我通过字段列表执行 foreach 循环
foreach (IField field in this._fields)
{
/* Do some work here */
}
本地主机、开发环境和我们的暂存环境一切都很好。但是当我们部署到我们的开发集群时,每个“字段”在循环期间都是空的。什么会导致这些对象为空?当我从另一个数据列表加载此列表时,一切都加载正常并且该数据不为空。
确保您没有在应用程序中使用应用程序级缓存来存储 IField 的内容,因为它不会在集群中的服务器之间复制。
如果您使用会话缓存,请再次确保在集群中运行时将其持久化到 SQL Server。如果是进程内的 Session 缓存,它对集群中的每个服务器都是唯一的(类似于 Application 缓存)。
首先检查:你是如何收集这些字段的?您是否在沿途某处作为 IField 做一些事情?如果它不实现 IField,这将有效地给出 null。
如果不是上述情况,那将是一个非常奇怪的情况。唯一想到的是,我在另一个提供商开发的应用程序中的一些清晰代码中看到了一些非常糟糕的东西:
void Clear()
{
//some normal code to clear info on some controls
myTextBox = null;
anotherTextBox = null;
}
虽然这样做没有意义,但它实际上会给 asp.net 带来麻烦。在某些特定的回发场景中,asp.net 在其生命周期的某些内部部分中失败并出现 nullreferenceexception。
因此,还要检查是否有一些奇怪的例程将 null 分配给页面上声明的控件。