2009-07-22 13 views
14

Sto comunicando con un server Web da .Net. Il server Web genera un errore interno del server 500 e scrive un messaggio di errore dettagliato.WebException durante la lettura di un flusso di risposta di WebException

Sto provando a leggere il messaggio di errore ricevuto da un'eccezione Web, ma ottenendo un'altra eccezione Web. Perché viene generata la seconda eccezione WebException?

try 
{ 
    var webResponse = (HttpWebResponse)webRequest.GetResponse(); 
} 
catch (WebException e) 
{ 
    if (e.Status == WebExceptionStatus.ProtocolError) 
    { 
    // the next line throws a web exception 
    Console.WriteLine(new StreamReader(e.Response.GetResponseStream()).ReadToEnd()); 
    } 
} 

risposta

12

Perché è sorprendente? Provare quanto segue da MSDN:

try { 
    // Create a web request for an invalid site. Substitute the "invalid site" strong in the Create call with a invalid name. 
    HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create("invalid site"); 

    // Get the associated response for the above request. 
    using (HttpWebResponse myHttpWebResponse = 
       (HttpWebResponse) myHttpWebRequest.GetResponse()) { 
     myHttpWebResponse.Close(); 
    } 
} 
catch(WebException e) { 
    Console.WriteLine("This program is expected to throw WebException on successful run."+ 
         "\n\nException Message :" + e.Message); 
    if(e.Status == WebExceptionStatus.ProtocolError) { 
     var response = ((HttpWebResponse)e.Response); 
     Console.WriteLine("Status Code : {0}", response.StatusCode); 
     Console.WriteLine("Status Description : {0}", response.StatusDescription); 

     try { 
      using (var stream = response.GetResponseStream()) { 
      using (var reader = new StreamReader(stream)) { 
       var text = reader.ReadToEnd(); 
       Console.WriteLine(text); 
      } 
      } 
     } catch (WebException ex) { 
      // Oh, well, we tried 
     } 
    } 
} 
catch(Exception e) { 
    Console.WriteLine(e.Message); 
} 
+0

Amm, perché voglio effettivamente leggere il messaggio di errore trasmesso sul filo in qualche modo. Il sito Web non è inesistente, risponde con un errore, che voglio registrare/analizzare sul lato client. – ripper234

+0

Se il sito web non esiste, da dove viene l'errore? In ogni caso, aggiornato. –

+1

È _non_ inesistente :) – ripper234

Problemi correlati