2011-08-12 22 views
23

Tengo una herramienta de diagnóstico que prueba un servicio web.Obtener errores de WebClient como serie

Quiero que la herramienta informe cuando haya problemas, por lo que he implementado un servicio con un problema con el contrato para probarlo.

Cuando hojeo a ella llego a una página con un mensaje muy descriptiva, tales como:

An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension:
System.ServiceModel.Description.DataContractSerializerOperationBehavior contract: DataContract for type XXX cannot be added to DataContractSet since type XXX with the same data contract name XXX in namespace XXX is already present and the contracts are not equivalent etc..

Lo que yo quiero es ser capaz de llamar a:

myErrorMsg = WebClient.DownloadString("MyBadService.svc"); 

y obtiene este error útil mensaje como una cadena, sin embargo, me sale el siguiente WebException:

The remote server returned an error: (500) Internal Server Error.

¿Cómo puedo obtener el mismo desorden de error Edad que recibí en el navegador devuelto como una cadena, sin obtener una excepción?

Gracias.

+0

error 500 significa que su sitio web ha finalizado inesperadamente. – Zenwalker

Respuesta

54

Tiene que atrapar la excepción y leer la respuesta.

catch (WebException exception) 
{ 
    string responseText; 

    var responseStream = exception.Response?.GetResponseStream(); 

    if (responseStream != null) 
    { 
     using (var reader = new StreamReader(responseStream)) 
     { 
     responseText = reader.ReadToEnd(); 
     } 
    } 
} 
+1

Hola gracias – lockstock

+4

Esto explotará si se lanza WebException debido a un error de conexión, error de resolución de nombre, etc. Verifique para asegurarse de que hay una respuesta antes de tratar de obtener una secuencia de la misma. – JamieSee

+0

¡Jaja! finalmente obtuve la solución. Muchas gracias @celcel – Anand