2011-01-27 16 views
8

Scusa se questo è già stato risolto in questo sito, ho cercato ma non ho trovato questo scenario esatto.Come risolvere "System.Web.HttpException (0x80004005): Il file non esiste"?

Aggiungo log4net a un servizio WCF. Ho aggiunto un gestore nell'evento Application_Error e sta rilevando un errore di file non trovato su ogni richiesta.

L'ho visto con i siti Web, e in genere l'errore può essere rintracciato per non avere un file "favicon" nella directory root, o per un'immagine mancante a cui si fa riferimento in un foglio di stile css.

Tuttavia, questo è un servizio WCF, non esiste un foglio di stile CSS e l'aggiunta di un favicon alla radice non ha risolto il problema.

Qualcun altro ha un buon modo per risolvere questo?

Alcuni indizi:

  • non ho ancora schierato questo al server IIS vero, sto correndo localmente.
  • L'errore non si verifica quando sto facendo funzionare in DEBUG all'interno di Visual Studio, solo quando ho accedere al servizio da un browser web (Internet Explorer o Chrome)
  • ho aggiunto il sentiero URL e file al messaggio di errore e questo è quello che sono:

    URL:http://localhost:3994/

    FilePath:/

    Errore: System.Web.HttpException (0x80004005): il file non esiste.

Edit: i valori di cui sopra sono quelli che compaiono nella eccezione registrato:

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); 
} 

Qualsiasi aiuto sarebbe molto apprezzato.

+0

Hai dimenticato di menzionare il file .svc nell'URL? – Pradeep

+0

Vedere la modifica che ho inviato alla mia domanda. – camainc

+1

usa il tasto '(quello che contiene anche il carattere ~) per formattare il codice nei commenti e simili. –

risposta

6

Il motivo è probabile che il servizio non sia stato specificato. Quando un server web (anche lo sviluppatore locale) riceve una richiesta per una cartella, guarda all'interno di quella cartella per la pagina predefinita (di solito chiamata: index.htm, index.html, default.asp, default.aspx, ecc.) E presente (a meno che non si stia utilizzando una descrizione del servizio basata su REST). Quando corri da VS, il debug ti porterà direttamente al servizio effettivo.

In questo caso, poiché è stato creato un servizio, è necessario specificare la posizione del servizio esatto, ad esempio http://localhost:3994/service.svc.

Inoltre: se si avvia una sessione di debug e si modifica l'URL su http://localhost:3994/, si dovrebbe essere in grado di verificare ciò con il debugger.

+0

Grazie, questo mi ha aiutato a capire perché questo sta accadendo. Suppongo che non dovrebbe accadere troppo spesso in un ambiente di produzione, quindi aggiungerò solo un po 'di logica per intrappolarlo e non preoccuparmi troppo di ciò. – camainc

+1

Meglio ancora, aggiungi una pagina html statica di default che non dice all'utente nulla di ciò che è in quel sito solo chi/dove contattare. Quindi non devi preoccuparti di consegnare l'errore in quanto di solito non registreresti comunque un errore 404 (non trovato). –

+0

Grazie! Questo è un suggerimento utile. – camainc

Problemi correlati