Нулевая ссылка при выполнении цикла foreach с интерфейсом ASP.Net Cluster Environment - PullRequest
1 голос
/ 24 марта 2009

У меня есть список в веб-элементе управления, когда элемент управления создает дочерние элементы управления. Я выполняю цикл foreach по списку полей как

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

Локальный хост, среда разработки и наша промежуточная среда, все в порядке. Но когда мы внедряем в наш кластер dev, каждое «поле» становится нулевым во время цикла. Что может привести к тому, что эти объекты будут нулевыми? Когда я загружаю этот список из другого списка данных, все загружается нормально, и эти данные не равны нулю.

Ответы [ 2 ]

2 голосов
/ 24 марта 2009

Убедитесь, что вы не используете кэш уровня приложения в своем приложении для хранения содержимого ваших полей IFields, поскольку оно не реплицируется на серверы в кластере.

Если вы используете кэш сеанса, снова убедитесь, что он сохраняется в SQL Server при работе в кластере. Если это внутрипроцессный кэш сеанса, он уникален для каждого сервера в кластере (аналогично кешу приложений).

0 голосов
/ 24 марта 2009

Первая проверка: как вы получаете эти поля коллекции? Вы делаете что-то вроде IField где-нибудь по пути? Это даст нулевое значение, если оно не реализует IField.

Если это не так, это будет действительно странный сценарий. Единственное, что приходит на ум, было что-то действительно ужасное, что я видел в каком-то ясном коде в приложении, разработанном другим провайдером:

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

Хотя в этом нет никакого смысла, на самом деле это вызывает проблемы с asp.net. В некоторых конкретных сценариях обратной передачи asp.net не выполнялся с исключением nullreference во время части некоторых внутренних частей своего жизненного цикла.

Итак, также проверьте, есть ли какие-то странные процедуры, присваивающие значение null элементам управления, объявленным на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...