Сбой W3WP при инициализации коллекции - PullRequest
1 голос
/ 02 июня 2010

Я создал приложение ASP.NET MVC, к которому инициализатор подключен к PreApplicationStartMethodAttribute . При инициализации создается экземпляр коллекции, который реализует определенный мной интерфейс. Когда я создаю экземпляр этой коллекции, w3wp.exe вылетает со следующими двумя непонятными записями в журнале событий:

Faulting application name: w3wp.exe, version: 7.5.7600.16385, time stamp: 0x4a5bd0eb
Faulting module name: clr.dll, version: 4.0.30319.1, time stamp: 0x4ba21eeb
Exception code: 0xc00000fd
Fault offset: 0x0000000000001177
Faulting process id: 0x1348
Faulting application start time: 0x01cb0224882f4723
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Report Id: c6a0941e-6e17-11df-864d-000acd16dcdb

И

Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: w3wp.exe
P2: 7.5.7600.16385
P3: 4a5bd0eb
P4: clr.dll
P5: 4.0.30319.1
P6: 4ba21eeb
P7: c00000fd
P8: 0000000000001177
P9: 
P10: 

Attached files:

These files may be available here:


Analysis symbol: 
Rechecking for solution: 0
Report Id: c6a0941e-6e17-11df-864d-000acd16dcdb
Report Status: 0

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

Моя самая большая проблема заключается в том, что я абсолютно не понимаю, почему происходит сбой w3wp. Это не StackOverflowException или что-то конкретное в этом роде, все, что я получаю, это неумный мусор, упомянутый выше.

Я пытался использовать DebugDiag и IISState для отладки процесса w3wp, но DebugDiag доступен только для анализа после дампов в x64 (я работаю в Windows 7 x64, поэтому процесс w3wp является 64-битным), и IISStat говорит следующее, когда я пытаюсь его запустить:

D:\Programs\iisstate>IISState.exe -p 9204 -d
Symbol search path is: SRV*D:\Programs\iisstate\symbols*http://msdl.microsoft.com/download/symbols

IISState is limited to processes associated with IIS.
If you require a generic debugger, please use WinDBG or CDB.
They are available for download from http://www.microsoft.com/ddk/debugging.
This error may also occur if a debugger is already attached to the process
being checked.

Incorrect Process Attachment

Я 10 раз дважды проверил правильность идентификатора процесса моего w3wp. Я подозреваю, что IISState тоже может отлаживать только процессы x86. Установка точки останова в любом месте приложения абсолютно ничего не делает. Точка останова не достигнута, и w3wp падает, как только запрос поступает в IIS из браузера. Запуск приложения с помощью F5 в Visual Studio 2010 или запуск другого приложения для запуска и запуска процесса w3wp, а затем присоединение к нему отладчика VS2010 с последующим посещением неисправного приложения.

Я также попытался добавить модуль HTTP, как описано в KB-911816 , а также добавить его в мой web.config файл:

<configuration>
  <runtime>
    <legacyUnhandledExceptionPolicy enabled="true" />
  </runtime>
</configuration>

Само собой разумеется, это не имеет абсолютно никакого значения. Поэтому у меня нет возможности отлаживать процесс w3wp, нет возможности извлечь из него какую-либо информацию и заполнить весь мусор, записанный в моем журнале событий. Если у кого-нибудь есть идеи по устранению этой проблемы, пожалуйста, дайте мне знать!

Ответы [ 2 ]

1 голос
/ 09 мая 2011

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

Моя коллекция была инициализирована на основе RouteTable.Routes, что могло вызвать исключение (возможно, из-за того, что она еще не была инициализирована на столь ранней стадии жизненного цикла ASP.NET). Откладывание связи с RouteTable.Routes до более поздней стадии решило проблему.

Хотя это не решение, которое будет работать для всех, оно сработало для меня, и я нахожу проблему настолько неясной, что я оставлю это для любого, чтобы комментировать и отвечать, потому что я не нашел существующих сообщений Об этой проблеме можно говорить где угодно, поэтому она может пригодиться в будущем.

0 голосов
/ 05 июня 2010

Использование ADplus.exe в последних средствах отладки для Windows для записи аварийных дампов. Тогда анализ дампа должен показать вам, что вызывает сбой,

http://www.microsoft.com/whdc/devtools/debugging/default.mspx

http://www.microsoft.com/downloads/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&displaylang=en

Версия 6.12.2.633 является обязательной, поскольку содержит только рабочую копию adplus.exe (обратите внимание, что вы не должны использовать adplus.vbs).

...