2009-11-26 20 views
11

Lanzo algunas excepciones de jabón en mi servicio web con éxito. Me gustaría capturar las excepciones y acceder a la cadena y ClientFaultCode que se llaman con la excepción. He aquí un ejemplo de uno de mis excepciones en el servicio web:¿Cómo atrapa una excepción lanzada de un servicio web?

throw new SoapException("You lose the game.", SoapException.ClientFaultCode); 

En mi cliente, trato de ejecutar el método del servicio web que puede lanzar una excepción, y lo cojo. El problema es que mis bloques de captura no hacen nada. Vea este ejemplo:

try 
{ 
    service.StartGame(); 
} 
catch 
{ 
    // missing code goes here 
} 

cómo puedo acceder a la cuerda y ClientFaultCode que se llama con la excepción lanzada?

+0

He estado luchando con esto, creando una clase de respuesta simple con el mensaje de error es la mejor opción. Consulte esta pregunta y respuesta: http://stackoverflow.com/q/32058/945875 – Justin

Respuesta

6

Captura la instancia SoapException. De esta forma puede acceder a su información:

try { 
    service.StartGame(); 
} catch (SoapException e) { 
    // The variable 'e' can access the exception's information. 
} 
+2

Solo para asegurarse de que Lou no descifrará su código con este cambio, puede agregar un bloque 'catch (Exception e) 'adicional. a veces es posible que la excepción no sea 'SoapException' ... por ejemplo:' OutOfMemoryException', o problema de conectividad, o aborto de hilo, etc. –

+0

Esto funciona bien. Sin embargo, tengo una pregunta. ¿Cómo puedo saber cómo se llama realmente la cadena para poder acceder a ella? Por ejemplo: e.GetString() o algo así. Para este ejemplo en particular, quiero acceder a la cadena "Pierdes el juego". – Lou

+0

Puedo llamar a e.Message que devuelve un mensaje de error muy largo, pero solo quiero el mensaje de cadena. – Lou

1
catch (SoapException soapEx) 
{ 
    //Do something with soapEx 
} 
9

Es posible que desee conocer las excepciones específicas.

try 
{ 
    service.StartGame(); 
} 
catch(SoapHeaderException) 
{ 
// soap fault in the header e.g. auth failed 
} 
catch(SoapException x) 
{ 
// general soap fault and details in x.Message 
} 
catch(WebException) 
{ 
// e.g. internet is down 
} 
catch(Exception) 
{ 
// handles everything else 
} 
+0

esto no responde la pregunta de Louise –

+0

detalles adicionales en x.Mensaje –

Cuestiones relacionadas