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

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

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

При попытке загрузить файл * .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" />

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

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

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

Не могу найти ни одного ответа на эту проблему в Интернете.

Редактировать: Я включил отслеживание Failed Request, и это то, что он показывает:

MODULE_SET_RESPONSE_ERROR_STATUS Предупреждение ModuleName = "IsapiModule", Notification = "EXECUTE_REQUEST_HANDLER", HttpStatus = "500", HttpReason = "Внутренняя ошибка сервера", HttpSubStatus = "0", ErrorCode = "Идентификатор операции недопустим. (0x800710dd) ", ConfigExceptionInfo =" "

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

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

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

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

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

Ответы [ 6 ]

3 голосов
/ 24 мая 2011

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

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

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

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

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

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

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

0 голосов
/ 28 сентября 2013

Вы должны добавить этот скрипт в ваш 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>

Надеюсь, это поможет! Не унывайте.

0 голосов
/ 27 августа 2009

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

0 голосов
/ 06 августа 2009

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

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

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

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

0 голосов
/ 06 августа 2009

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

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

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

0 голосов
/ 06 августа 2009

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

...