¿Cómo diagnosticar un error interno del servidor 500 en IIS 7.5 cuando no se escribe nada en el registro de eventos?

43

Acabo de implementar una actualización en un sitio ASP.NET MVC3 existente (ya estaba configurado) y obtengo la pantalla azul de muerte de IIS que indica

Error HTTP 500.0 - Error interno del servidor
La página no se puede mostrar porque se ha producido un error interno del servidor.

Sin embargo; no aparece nada en el registro de eventos de la aplicación donde esperaría ver una descripción (más) detallada de la entrada.

¿Cómo puedo hacer para diagnosticar este problema?

Greg B
fuente
He tenido exactamente el mismo problema aquí. En mi experiencia, si el registro de eventos está vacío, la solicitud no se enrutó correctamente al proceso de trabajo. En una de nuestras implementaciones recientes, vimos que la aplicación funcionaba de manera intermitente con aproximadamente el 50% de las solicitudes que fallaban aleatoriamente con el error 500 y nada en los registros. Sospecho que algo va mal con la descarga de AppDomain que ocurre después de la implementación. Por curiosidad, ¿estás ejecutando antivirus en tu entorno de producción? ¿Un reinicio de IIS resuelve el problema (hasta la próxima implementación)?
ShadowChaser

Respuestas:

42

Eche un vistazo a la función de seguimiento de solicitudes fallidas de IIS7:

Solucionar problemas de solicitudes fallidas mediante el seguimiento en IIS 7
Solucionar problemas con el seguimiento de solicitudes fallidas

La otra cosa que haría es ajustar su <httpErrors>configuración porque IIS puede estar tragando un mensaje de error desde más arriba:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

Si el sitio está escrito en ASP clásico, asegúrese de activar la opción Enviar errores al navegador en la función de configuración de ASP:

ingrese la descripción de la imagen aquí

Y, por último, si está utilizando Internet Explorer, asegúrese de haber desactivado Mostrar mensajes de error HTTP amigables en la Configuración avanzada (aunque sospecho que ya lo ha hecho o está utilizando un navegador diferente).

Kev
fuente
2
existentesRespuesta se estableció en Reemplazar. Gracias por el consejo.
Greg B
Esta es una muy buena respuesta, pero podría mejorarse si incluyera cómo iniciar la ventana de configuración ASP.
Michael Potter
13

En mi caso:

  • El registro de eventos estaba vacío.
  • web.config no estaba dañado: verificado usando el mismo en la máquina local / usando inetmgr

Finalmente...

  • La comprobación de los registros de IIS mostró una solicitud como esta

...Chrome/57.0.2987.133+Safari/537.36 500 19 5 312

La clave es:

sc-status sc-substatus sc-win32-status 500 19 5

que con un poco de google me señaló el IIS_USRSno tener permisos de lectura para la wwwcarpeta

fíat
fuente
2
Encontré la lista de códigos de estado aquí: support.microsoft.com/en-us/help/943891/…
sirdank
4

El problema más obvio son los derechos NTFS incorrectos o nulos en la carpeta de la aplicación web. Así que asegúrese de que la cuenta que sirve al sitio tenga los permisos correctos. Sin los derechos NTFS adecuados para el directorio web, no importa lo que coloque en web.config, ya que nunca se leerá.

Una verificación rápida puede ser otorgarles a todos derechos completos: si el sitio comienza a funcionar, entonces sabe que es un problema de derechos y luego puede establecer la asignación de derechos apropiados a una cuenta más apropiada.

rismo
fuente
1

Si se actualiza desde IIS6, entonces puede ser uno de los que funciona web.config en 6, pero no en IIS 7.5 ... Haga doble clic en todos los íconos en IIS para el sitio web y puede obtener un error sobre el formato (Sección debe estar debajo de otra sección ...)

M Hall
fuente
0

Tuve el mismo problema con una aplicación web de Azure. Durante la depuración local, los mensajes de error (JSON) devueltos por las llamadas ajax se devolvieron completamente al navegador. Pero una vez implementado en la aplicación web, los mensajes se tragaron y me devolvieron un mensaje de error 500 predeterminado. Así que tuve que establecer explícitamente el existingResponsevalor PassThroughen la httpErrorsetiqueta web.config .

Loul G.
fuente