ASP.NET 4, Entity Framework 4.2, IIS 7: Неисправное поведение исправляется только при перезапуске IIS? - PullRequest
0 голосов
/ 14 декабря 2011

Используя IIS 7, ASP.NET MVC 3 и EF 4.2, я загружаю контент из базы данных, затем отправляю его клиенту (пока ничего странного):

 var result = DB.Contacts.Select( p => new { id=p.ID, name=p.name }).ToList();
 return Json(result);

Мы протестировали его, одобрилии заставить его работать на клиентов.Это то, что он обычно отправляет обратно:

"[{"id":1,"name":"one"},{"id":2,"name":"two"}]"

Это то, что он отправляет обратно при сбое, который не останавливается, пока мы не перезапустим службу IIS (WWW):

"[{"id":null,"name":null},{"id":null,"name":null}]"

Нам не удалось воссоздать проблему специально, но как только мы отлаживали в VS 2010 для Windows 7, и отладчик перебирал код случайным образом, выполняя функцию с 4-й строки на первую строку изфункция, возврат в функцию и т. д.

Что может вызвать это и как этого избежать? Мы сталкиваемся с этим на нескольких разных серверах и рабочих станциях в нескольких разных местах расположения клиентов.В большинстве случаев SQL Server 2008 или 2005 работает на той же машине, что и IIS 7.

1 Ответ

2 голосов
/ 14 декабря 2011

Прыжки в отладчике - это то, что я видел, когда:

  • «Требуется исходный код для соответствия» отключено
  • Отладчик использует файлы неправильных символов (PDB)
  • Сборка была построена в режиме Release

Одна вещь, которая мне показалась полезной, - это открыть представление «Модули» в VS и убедиться, что файлы PDB для сборки, которую вы отлаживаете, являются правильными. Временная метка в DLL должна указывать, верен ли он, или просто знать путь (в зависимости от того, как вы отлаживаете сайт)

Без большего контекста вокруг приведенного выше кода .NET трудно сказать. Возможно, что-то убивает ваш сеанс ... и сайт не переинициализирует вещи, пока вы не перезапустите пул приложений или IIS.

Удачи!

Редактировать: Некоторые другие идеи заключаются в том, чтобы поразить страницу / сайт с помощью тестера загрузки и поместить в какую-либо запись в журнал или утверждение непосредственно перед вызовом Json (..), который проверяет нулевые значения в анонимном объекте .. Звучит как проблема старения, которая возникает после того, как приложение используется некоторое время. Если это так, то это может быть воспроизведено при адекватном нагрузочном тестировании.

...