2011-01-27 29 views
8

Disculpas si esto ya se ha respondido en este sitio, busqué pero no encontré este escenario exacto.Cómo solucionar problemas de "System.Web.HttpException (0x80004005): el archivo no existe"?

Estoy agregando log4net a un servicio WCF. Agregué un controlador en el evento Application_Error, y está detectando un error de archivo no encontrado en cada solicitud.

He visto esto con sitios web, y generalmente el error se puede rastrear hasta no tener un archivo "favicon" en el directorio raíz, o una imagen faltante a la que se hace referencia en una hoja de estilos css.

Sin embargo, este es un servicio WCF, no hay una hoja de estilo CSS, y agregar un favicon a la raíz no resolvió el problema.

¿Alguien más tiene una buena manera de solucionar esto?

Algunas pistas:

  • no he desplegado esta todavía en el servidor IIS real, yo estoy corriendo localmente.
  • El error no sucede cuando estoy corriendo en DEBUG dentro de Visual Studio, sólo cuando acceden al servicio desde un navegador web (Internet Explorer o Chrome)
  • que añade que la ruta URL y el archivo al mensaje de error, y esto es lo que son:

    URL:http://localhost:3994/

    FilePath:/

    error: System.Web.HttpException (0x80004005): el archivo no existe.

Editar: los valores anteriores son los que aparecen en la excepción conectado:

protected void Application_Error(object sender, EventArgs e) 
{ 
    var objErr = Server.GetLastError().GetBaseException(); 
    if (objErr is System.Web.HttpException) 
    { 
     var filePath = Context.Request.FilePath; 
     var url = ((HttpApplication) sender).Context.Request.Url; 
     Log.Error("URL: " + url + "; FilePath: " + filePath, objErr); 
    } else 
     Log.Error("Application Error", objErr); 
} 

Cualquier ayuda sería muy apreciada.

+0

¿Olvidaste mencionar el archivo .svc en la URL? – Pradeep

+0

Ver la edición que publiqué en mi pregunta. – camainc

+1

use la tecla '(la que también contiene el caracter ~) para formatear el código en comentarios y similares. –

Respuesta

6

Es posible que el servicio no se haya especificado. Cuando un servidor web (el desarrollador local también) recibe una solicitud para una carpeta, busca dentro de esa carpeta la página predeterminada (generalmente llamada: index.htm, index.html, default.asp, default.aspx, etc.) y presente eso (a menos que esté usando una descripción de servicio basada en REST). Cuando se ejecuta desde VS, la depuración lo llevará directamente al servicio real.

En este caso, debido a que ha creado un servicio, debe especificar la ubicación del servicio exacto, es decir, http://localhost:3994/service.svc.

También: Si inicia una sesión de depuración y luego cambia la URL a http://localhost:3994/, debería poder comprobar que este es el caso con el depurador.

+0

Gracias, eso me ayudó a entender por qué está sucediendo esto. Supongo que no debería suceder con demasiada frecuencia en un entorno de producción, así que agregaré algo de lógica para atraparlo y no preocuparme demasiado por él. – camainc

+1

Mejor aún, agregue una página html estática como la predeterminada que le dice al usuario nada sobre qué hay en ese sitio, solo con quién o dónde contactar. Entonces no tiene que preocuparse de entregar el error ya que generalmente no registraría un error 404 (no encontrado) de todos modos. –

+0

¡Gracias! Esa es una sugerencia útil. – camainc

Cuestiones relacionadas