Любой способ обернуть код для обнаружения сбоев пула приложений IIS 7 MVC 3.0 - PullRequest
1 голос
/ 27 мая 2011

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

Эта страница ничем не отличается от других страниц, в основном захватывает запись базы данных ипредставляет информацию с использованием представления.

Мне не удалось выяснить, почему происходит сбой, приводящий к закрытию пула приложений и закрытию всего сайта.Я установил отслеживание журналов ELMAH и обернул базовый контроллер, но при сбое пула приложений журналы не записываются в ELMAH

Я пытался перехватить все неуправляемые исключения с помощью этого метода
http://support.microsoft.com/kb/911816однако пул приложений все еще падает, и я не приблизился к поиску решения.

Ни один код не является неуправляемым, поэтому я не уверен, почему это происходит, за исключением обращений к базе данных, которые могут давать сбой, но не вижуошибки в журналах базы данных.Я использую DynamicMethod для генерации кода IL для сопоставления со структурой базы данных для моих моделей, но та же реализация работает для любой другой модели, и прерывистый вызов работает нормально на моей машине разработчика.

Вопрос 1 Если этот код, сгенерированный IL, дает сбой, должно ли исключение по-прежнему перехватываться при обработке ошибок стандартного запроса?

Журналы событий являются загадочными и почти бесполезными.

Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an internal error in the .NET Runtime at IP      000007FEFA352648 (000007FEFA350000) with exit code 80131506.

DebugDiag только для 64-битных окон позволяет мне анализировать файлы дампа, и я не могу подключить его к пулу приложений или процессу IIS.

Приложение отлично работает в режиме отладки и выпуска в VS2010.

Вопрос 2 Я работаю на 32-разрядной, но развертываю на 64-разрядную.Есть ли сценарий, в котором что-то работает нормально в 32-битной среде, но не работает в 64-битной среде?

Вопрос 3 Я не уверен, какие другие способы ведения журналов или подходов я могу предпринять, чтобы найти эту проблему.Существуют ли какие-либо другие журналы или код, с которым я могу обернуть свой запрос, чтобы попытаться отследить проблему.

Я почти уверен, что это должно быть сбой в коде динамического метода, поэтому, если кто-то может ответить на Вопрос1, тогда это будетдействительно помочь

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Ok. Проблема была в том, что сгенерированный IL-код DynamicMethod не удался.

Если тип поля и тип базы данных не совпадали, это приводило к сбою всего пула приложений

Любые несоответствия типоводнако был обнаружен на сервере разработки, однако проблема заключалась в том, что тип базы данных int и тип поля Decimal не ломались на 32-разрядных компьютерах разработки, а ломались на 64-разрядном сервере развертывания.

Создание кода IL дляdll и запущенный PEVerify показали проблему.

Вопрос 1. Нет,Вопрос 2. В этой ситуации даВопрос 3. PEVerify, если вы генерируете код IL, всегда запускайте его через PEVerify.

0 голосов
/ 27 мая 2011

Полученная ошибка - фатальный сбой CLR.

1) Нет

2) Вам необходимо собрать соответствующую среду выполнения.

3) Без обмена информацией о том, что вы делаете в коде и какими неуправляемыми ресурсами вы пользуетесь, невозможно помочь дальше.

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