Mensaje detallado de 500 errores, ASP + IIS 7.5

192

IIS 7.5, 2008rc2, asp clásico, mensaje de error 500:

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

Necesito saber cómo configurar IIS para obtener un error más detallado.
He intentado establecer en verdadero todas las opciones de depuración en la configuración ASP.
Pero eso no funcionó. ¿Alguien puede ayudarme?

egidiocs
fuente
Estoy usando una forma diferente de registrar el error en el archivo de texto: stackoverflow.com/questions/20475502/… Diferencia principal: la información del error se almacenará en el archivo de texto
Zam

Respuestas:

231

He llegado a un mismo problema y se fija la misma manera que Alex K .

Entonces, si "Enviar errores al navegador" no funciona, configure también esto:

Páginas de error -> 500 -> Editar configuración de funciones -> "Errores detallados"

ingrese la descripción de la imagen aquí

También tenga en cuenta que si el contenido de la página de error devuelto es bastante corto y está usando IE, IE ignorará el contenido útil enviado por el servidor y le mostrará su propia página de error genérico. Puede desactivar esto en las opciones de IE o usar un navegador diferente.

Vaclav Elias
fuente
9
Si todavía no funciona, desactive los mensajes de error http amigables
Tim Partridge
3
Si faltan "Páginas de error" en su panel, asegúrese de que la característica esté habilitada: Active o desactive las características de Windows => Servicios WWW, Características HTTP comunes, [x] Errores HTTP
fiat
1
@fiat Para habilitar "Páginas de error", que tenía que ir: Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Jess Telford
Nota: "Páginas de error" y "Páginas de error de .NET" son diferentes. Usted quiere específicamente "Páginas de error" .
Jess Telford
@JessTelford HOW-TOpara páginas de error NET ?
Kiquenet
94

Si está en un servidor remoto, puede configurar su archivo web.config de la siguiente manera:

<configuration>
<system.webServer>
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true"/>
</system.webServer>
<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
</system.web>

safhac
fuente
1
En realidad, la <system.webserver>configuración fue suficiente en mi caso, gracias.
marapet
44
La system.webServersección es leída por IIS 7+ incluso cuando ejecuta ASP clásico
Tim Lewis
2
customErrors mode = "Off" lo hizo por mí
spankmaster79
ya no es necesario usar customErrors(por ejemplo, IIS 7+, ASP.NET, Classic AppPool ) tedgustaf.com/blog/2011/5/…
Kiquenet
49

Haga doble clic en "ASP" en la pantalla de inicio del sitio en el administrador de IIS, expanda "Propiedades de depuración", habilite "Enviar errores al navegador" y haga clic en "Aplicar".

En "Páginas de error" en la pantalla de inicio, seleccione "500", luego "Editar configuración de funciones" y seleccione "Errores detallados".

Tenga en cuenta que se aplican los mismos pasos para IIS 8.0 (Windows Server 2012).

Alex K.
fuente
Tal vez se aplique a IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) con CLASSIC AppPool (NO integrado)
Kiquenet
43

Después de probar la respuesta de Vaclav y Alex , aún tenía que desactivar "Mostrar mensajes de error HTTP amigables" en IE

ingrese la descripción de la imagen aquí

Tim Perdiz
fuente
20

En web.config bajo

<system.webServer>

reemplazar (o agregar) la línea

<httpErrors errorMode="Detailed"></httpErrors>

con

<httpErrors existingResponse="PassThrough" errorMode="Detailed"></httpErrors>

Esto se debe a que, de manera predeterminada, IIS7 intercepta códigos de estado HTTP, como 4xx y 5xx, generados por aplicaciones más adelante.

A continuación, habilite " Enviar errores al navegador " en la sección "ASP" y en " Páginas de error / Editar configuración de funciones ", seleccione "Errores detallados".

Además, otorgue permisos de escritura en la carpeta del sitio web al grupo integrado IIS_IUSRS .

Niente00
fuente
1
Para el equivalente de usuario de Power Shell, ejecute:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz
20

TLDR: Primero determine de qué parte de la tubería está obteniendo el error (desplácese buscando capturas de pantalla de algo que se parezca a su error), realice cambios para obtener algo nuevo, repita.

Primero determine qué mensaje de error está viendo realmente.

Si está viendo el archivo ubicado aquí ...

% SystemDrive% \ inetpub \ custerr \\ 500.htm

... que generalmente se ve así:

Error predeterminado de IIS 500

... entonces sabe que está viendo la página de error configurada actualmente en ** IIS ** y NO necesita cambiar la configuración de ASP.net customErrors, la configuración de detalles de error asp o la configuración del navegador "mostrar errores http amigables".

Es posible que desee ver la ruta de referencia anterior en lugar de confiar en mi captura de pantalla en caso de que alguien la haya cambiado.

"Sí, veo el error descrito anteriormente ..."

En este caso, está viendo la configuración de < httpErrors > o en el Administrador de IIS es Páginas de error -> Editar configuración de funciones . El valor predeterminado para esto es errorMode = DetailLocalOnly en el nivel del nodo del servidor (en oposición al nivel del sitio), lo que significa que si bien verá esta página de error configurada mientras está remota, debería poder iniciar sesión localmente en el servidor y ver la lista completa error que debería verse así:

Error HTTP detallado

Debería tener todo lo que necesita en ese momento para corregir el error actual.

"Pero no veo el error detallado incluso navegando en el servidor"

Eso deja un par de posibilidades.

  1. El navegador que está utilizando en el servidor está configurado para usar un proxy en su configuración de conexión, por lo que no se considera "local".
  2. En realidad, no está navegando hacia el sitio que cree que está navegando; esto ocurre comúnmente cuando hay un equilibrador de carga involucrado. Haga una comprobación de ping para ver si dns le proporciona una IP en el servidor o en otro lugar.
  3. Eres httpErrors de tu sitio configuración de está configurada solo para "Personalizada". Cámbielo a "DetailLocalOnly". Sin embargo, si tiene un error de configuración, esto puede no funcionar ya que el nivel de sitio httpErrors también es un elemento de configuración. En ese caso, pase al n. ° 4
  4. El valor predeterminado para httpErrors para todos los sitios está configurado como "Personalizado". En este caso, debe hacer clic en el nodo del servidor de nivel superior en el Administrador IIS (y no en un sitio en particular) y cambiar los httpErrors configuración de allí a . Si se trata de un servidor interno y no le preocupa divulgar información confidencial, también puede configurarlo en "Detallado", lo que le permitirá ver el error de otros clientes que no sean el servidor.
  5. Te falta un módulo en el servidor como UrlRewrite (este me muerde mucho, y a menudo da el mensaje genérico independientemente de la configuración de httpErrors).

"Iniciar sesión en el servidor no es una opción para mí"

Cambie los httpErrors de su sitio a "Detallado" para que pueda verlo de forma remota. Pero si no funciona, su error ya podría ser un error de configuración, consulte el n. ° 3 inmediatamente anterior. Por lo tanto, puede estar atrapado con el n. ° 4 o n. ° 5 y necesitará a alguien de su equipo de servidores.

"No veo la página de error descrita anteriormente. Estoy viendo algo diferente"

Si ves esto ...

ingrese la descripción de la imagen aquí

... y esperas ver algo como esto ...

ingrese la descripción de la imagen aquí

... entonces necesita cambiar "Enviar errores al navegador" a verdadero en el Administrador de IIS, en Sitio -> IIS -> ASP -> Propiedades de depuración

Si ves esto ...

es decir, errores amigables 1

o esto...

es decir, errores amigables 2

... necesita deshabilitar errores amigables en su navegador o usar la vista web de Fiddler para ver la respuesta real frente a lo que su navegador elige mostrarle.

Si ves esto ...

Errores personalizados habilitados

... entonces los errores personalizados están funcionando pero no tienes una página de error personalizada (por supuesto, en este punto hablamos de .net y no de asp clásico). Debe cambiar su etiqueta customErrors en su web.config a RemoteOnly para ver en el servidor o Off para ver de forma remota.

Si ve algo que tiene el estilo de su sitio, es probable que los errores personalizados estén en On o RemoteOnly y muestre la página personalizada (Vistas-> Compartido-> Error.cshtml en MVC, por ejemplo). Dicho esto, es poco probable pero posible que alguien haya cambiado las páginas en IIS para httpErrors, así que vea la primera sección sobre eso.

b_levitt
fuente
9

intente establecer el valor del atributo httpErrors "existenteResponse" en "PassThrough". La mía se estableció en "Reemplazar", lo que hacía que el YSOD no se mostrara.

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
Dana Benson
fuente
2
customErrors son para asp.net. httpErrors son para IIS7, por lo que manejan contenido que no pasa por el controlador .net (por ejemplo .png, .js, etc.) Si desea páginas de error para tipos de contenido que no son.net, use páginas de error de IIS (httpErrors para IIS7 , la interfaz de usuario para IIS6.) El atributo customErrors se usa cuando el código .net está lanzando una excepción (404, 403, 500, etc.) y el atributo httpErrors se usa cuando IIS mismo está lanzando una excepción. Esto se debe a que, de manera predeterminada, IIS7 intercepta los códigos de estado HTTP, como 4xx y 5xx, generados por las aplicaciones más adelante.
Kiquenet
6

Una cosa que nadie ha mencionado es como una solución muy rápida y temporal, puede ver el error en el host local de ese servidor web.

RandomUs1r
fuente
1
Eso es si se selecciona la tercera opción visible en la respuesta de Vaclav .
ricksmt
3

También puede verificar que si cambió la carpeta de su sitio web principal ( c:\inetpub\wwwroot) a otra carpeta, debe otorgar permiso de lectura al grupo IIS_IUSRS en la nueva carpeta.

Rogerio Barretto
fuente
3

Las personas que han probado TODO y simplemente NO PUEDEN obtener los detalles del error para mostrar, como yo, es una buena idea verificar los diferentes niveles de configuración. Tengo un archivo de configuración en el nivel del sitio web y en el nivel de la aplicación (dentro del sitio web) verifique ambos. Además, resultó que tenía los Errores detallados deshabilitados en el nodo más alto de IIS (justo debajo de la Página de inicio, tiene el mismo nombre que el nombre del equipo del servidor web). Verifique las páginas de error allí.

Jon Koeter
fuente
1

Si ejecuta el navegador en el servidor y prueba su url del proyecto con la IP local, ha recibido todos los errores de ese proyecto sin una página de error general (por ejemplo, página de error 500).

Ali Rasouli
fuente