2011-01-27 9 views
8

Przepraszam, jeśli odpowiedź została już udzielona na tej stronie, szukałem, ale nie znalazłem tego dokładnego scenariusza.Jak rozwiązywać problemy "System.Web.HttpException (0x80004005): Plik nie istnieje"?

Dodaję log4net do usługi WCF. Dodałem procedurę obsługi w zdarzeniu Application_Error i przechwytuje błąd pliku nie znaleziono na każdym wniosku.

Widziałem to z witrynami internetowymi i zazwyczaj błąd można przypisać do nie posiadania "favicon" pliku w katalogu głównym lub do brakującego obrazu, o którym mowa w arkuszu stylów CSS.

Jest to jednak usługa WCF, nie ma arkusza stylów CSS, a dodanie favikona do katalogu głównego nie rozwiązało problemu.

Czy ktoś inny ma dobry sposób na rozwiązanie tego problemu?

pewne wskazówki:

  • nie wdrożyli to jeszcze do prawdziwego serwera IIS, używam go lokalnie.
  • Błąd nie dzieje gdy Używam w DEBUG wewnątrz Visual Studio, tylko wtedy, gdy dostęp do usługi za pomocą przeglądarki internetowej (IE lub Chrome)
  • dodałem adres URL i plików ścieżkę do komunikatu o błędzie, a to właśnie one:

    URL:http://localhost:3994/

    FilePath:/

    błąd: System.Web.HttpException (0x80004005): Plik nie istnieje.

Edit: Powyższe wartości są tym, co pojawia się w zalogowanego wyjątkiem:

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

Każda pomoc będzie mile widziana.

+0

Czy zapomniałeś wspomnieć o pliku .svc w adresie URL? – Pradeep

+0

Zobacz komentarz opublikowany na moje pytanie. – camainc

+1

użyj 'klawisza (również zawierającego znak ~) do formatowania kodu w komentarzach i tym podobnych. –

Odpowiedz

6

Powód jest prawdopodobnie taki, że usługa nie została określona. Gdy serwer sieciowy (również lokalny deweloper) otrzyma żądanie folderu, zajrzą do tego folderu dla domyślnej strony (zwykle o nazwie: index.htm, index.html, default.asp, default.aspx, itp.) I przedstawić to (chyba, że ​​używasz usługi opartej na REST). Po uruchomieniu z VS debugowanie przeniesie Cię bezpośrednio do rzeczywistej usługi.

W tym przypadku, ponieważ zbudowałeś usługę, musisz podać lokalizację dokładnej usługi, tj. http://localhost:3994/service.svc.

Także: Jeśli rozpoczniesz sesję debugowania, a następnie zmienisz adres URL na http://localhost:3994/, powinieneś być w stanie to sprawdzić w przypadku debuggera.

+0

Dzięki, pomogło mi to zrozumieć, dlaczego tak się dzieje. Przypuszczam, że nie powinno się to zdarzać zbyt często w środowisku produkcyjnym, więc dodam trochę logiki, aby ją zająć i nie martwić się o nią zbytnio. – camainc

+1

Co więcej, dodaj statyczną stronę html jako domyślną, która nie informuje użytkownika o tym, co jest na tej stronie, z kim/gdzie się skontaktować. Wtedy nie musisz się martwić o przekazanie błędu, ponieważ i tak zwykle nie rejestrowałeś błędu 404 (nie znaleziono). –

+0

Dzięki! To jest pomocna sugestia. – camainc

Powiązane problemy