2009-07-22 31 views
14

Me estoy comunicando con un servidor web desde .Net. El servidor web arroja un error interno de 500 servidores y escribe un mensaje de error detallado.WebException al leer la corriente de respuesta de WebException

Estoy tratando de leer el mensaje de error recibido de una excepción web, pero obtengo otra excepción web. ¿Por qué se lanza la segunda 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()); 
    } 
} 

Respuesta

12

¿Por qué es esto sorprendente? Pruebe lo siguiente desde 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, porque de hecho quiero leer el mensaje de error transmitido por el cable de alguna manera. El sitio web no es inexistente, responde con un error, que quiero registrar/analizar en el lado del cliente. – ripper234

+0

Si el sitio web no es inexistente, ¿de dónde viene el error? En cualquier caso, actualizado. –

+1

Es _no_ inexistente :) – ripper234

Cuestiones relacionadas