IIS7 периодически выдает ошибку 500. Может ли кто-нибудь помочь мне диагностировать это?

Извините за расплывчатое название, так как я действительно не могу кратко объяснить эту проблему.

В основном у меня Windows Server 2008 x64, IIS7, ASP.NET 2.05, и у меня есть сайт, работающий в Classic AppPool (и нет, я не могу работать в интегрированном).

При первой попытке загрузить файл * .aspx (т.е. после установки сайта, перезапуска сервера и т. Д.) Я получаю такую ​​ошибку:

Ошибка HTTP 500.0 - внутренняя ошибка сервера
Страница не может быть отображена из-за внутренней ошибки сервера.
Модуль: IsapiModule
Уведомление: ExecuteRequestHandler
Обработчик: PageHandlerFactory-ISAPI-2.0-64
Код ошибки: 0x800710dd
Способ входа: анонимный
Пользователь входа в систему: Аноним

В качестве обработчика используется IIS7 по умолчанию:

<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />


Я даже пробовал добавить свой собственный обработчик для aspx, который выглядел так:

<add name="aspx" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv2.0,bitness64" />

Единственное, что было сделано, - это изменить часть Handler уведомления об ошибке, чтобы она говорила IsapiModule.

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

Я даже попытался удалить файл web.config, но ничего не сделал.

Кажется, я не могу найти в Интернете однозначного ответа на эту проблему.

Изменить: я включил отслеживание неудачных запросов, и вот что он показывает:

MODULE_SET_RESPONSE_ERROR_STATUS Предупреждение ModuleName = "IsapiModule", Notification = "EXECUTE_REQUEST_HANDLER", HttpStatus = "500", HttpReason = "Внутренняя ошибка сервера", HttpSubStatus = "0", Идентификатор HttpSubStatus = "0", ErrorCodex800 = "Идентификатор операции не равен 0", ErrorCode800 = "Неисправность ErrorCode =" знак равно

И прямо перед ошибкой он показывает:

NOTIFY_MODULE_START ModuleName = "IsapiModule", Notification = "EXECUTE_REQUEST_HANDLER", fIsPostNotification = "false", fIsCompletion = "false"

Теперь, когда я сравниваю это с успешным запуском, разница в том, что ошибка вызывает MODULE_SET_REPONSE_ERROR_STATUS, тогда как успешный запуск - нет (а затем продолжает производить правильный вывод HTML).

Изменить: я взял простое приложение и попытался запустить его, но получил ту же ошибку. Но когда пул приложений находился в интегрированном режиме, он работал нормально! К сожалению, я не могу перенести наше приложение на интегрированное по причинам, которые не могу указать, но я сузил его до пула приложений. Также мне не нужно перезапускать сервер, чтобы воспроизвести ошибку, вместо этого подойдет переработка пула приложений.

Резюме:
- Как указано ниже, в журналах событий нет ничего, что указывало бы на сбой. Я просмотрел все журналы в средстве просмотра событий


person encee    schedule 06.08.2009    source источник
comment
Есть что-нибудь в журнале событий?   -  person John Saunders    schedule 06.08.2009
comment
Возникают ли какие-либо ошибки в приложении, которые могут запускать сервер 500?   -  person Dillie-O    schedule 06.08.2009
comment
Абсолютно ничего в журнале событий   -  person encee    schedule 06.08.2009
comment
Я не думаю, что в приложении есть что-то, что могло бы это сделать. Ведь работает со второй попытки   -  person encee    schedule 06.08.2009


Ответы (6)


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

Вы можете сделать это через диспетчер IIS. Щелкните свой веб-сайт, затем в разделе IIS в представлении функций дважды щелкните «Правила отслеживания невыполненных запросов».

Скорее всего, он еще не включен, поэтому в крайнем правом столбце выберите «Изменить отслеживание сайта». Установите флажок «Включить» и запишите каталог.

Затем вы можете либо добавить правило на этом экране, либо перейти в свое приложение и открыть оттуда функцию IIS «Правила отслеживания невыполненных запросов».

В крайнем правом столбце снова нажмите «Добавить ...», затем пройдите через мастер и настройте ведение журнала.

Загрузите страницу, которая снова выдает ошибку. Перейдите в папку журнала и дважды щелкните файл XML. В этом каталоге есть XSL. Не используйте его, потому что, как только он исчезнет, ​​он не будет воссоздан. : s Преобразованный XML покажет вам больше информации, чем вы можете надеяться.

Я как раз этим вечером использовал это, чтобы обнаружить, что настроенная мною страница ошибок использует ~ / вместо «/», в результате чего IIS умирает.

person Edward    schedule 24.05.2011

Когда приложение ASP.NET начинает загружаться, у вас может быть код, выполнение которого может занять слишком много времени, возможно, слишком большие переменные приложения или инициализация ресурсов.

Лучший способ - установить какой-то монитор ping, многие интернет-провайдеры предоставляют мониторы ping, которые могут отслеживать ваш URL-адрес html через регулярные интервалы, что может помочь поддерживать ваше приложение постоянно!

Попробуйте изучить процедуры инициализации вашего приложения asp.net, возможно, вы захотите увеличить некоторые значения тайм-аута !!

person Akash Kava    schedule 06.08.2009
comment
Что ж, это происходит с приложением Hello World, и я почти уверен, что у него нет длительного процесса инициализации. Кроме того, со второй попытки страница загружается нормально (даже если я удалю кеш сервера и все временные и сжатые файлы). - person encee; 06.08.2009

Похоже на что-то при запуске пула приложений. Но он должен регистрировать фактическую ошибку в средстве просмотра событий. Или вы можете отключить CustomErrors, чтобы отладить его. Дело в том, что вам нужно увидеть фактическую ошибку, чтобы понять, что происходит.

person marcc    schedule 06.08.2009
comment
Да вот в чем проблема. Я не знаю, где увидеть эту ошибку. Насколько я могу судить, абсолютно ничего не видно (кроме ошибки 500) - person encee; 06.08.2009
comment
Да и CustomErrors включен. Вот как я вообще получил информацию об ошибке. - person encee; 06.08.2009

У вас есть обработчик необработанных исключений в вашем коде ASPX (что-то вроде Global Application_Error)?

Вы должны уметь перехватить исключение и зарегистрировать его, если оно исходит из кода ASPX (что вполне возможно).

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

Как обрабатывать ошибки на уровне приложения

person Michael Maddox    schedule 06.08.2009

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

person encee    schedule 27.08.2009
comment
В исходном вопросе вы не упомянули, что работаете внутри виртуальной машины ;-) - person Oliver; 12.08.2014

Вы должны добавить этот скрипт в свой web.config:

<system.webServer>
    <handlers>
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </handlers>

I hope this help ! Cheer.

person xmencute    schedule 28.09.2013