Tengo una aplicación Silverlight 2 que consume un servicio WCF. Como tal, utiliza devoluciones de llamada asincrónicas para todas las llamadas a los métodos del servicio. Si el servicio no se está ejecutando, o falla, o la red no funciona, etc. antes o durante una de estas llamadas, se genera una excepción como era de esperar. El problema es que no sé cómo atrapar esta excepción.¿La mejor manera de atrapar una excepción de WCF en Silverlight?
Debido a que es una llamada asincrónica, no puedo envolver mi comienzan llamada con un bloque try/catch y tienen que recoger una excepción que sucede después de que el programa ha pasado de ese punto.
Como el proxy de servicio se genera automáticamente, no puedo poner un bloque try/catch en todas y cada una de las funciones generadas que llaman a EndInvoke (donde realmente aparece la excepción). Estas funciones generadas también están rodeadas por un código externo en la pila de llamadas, por lo que no hay ningún otro lugar en la pila para probar/atrapar.
No puedo poner el try/catch en mis funciones de devolución de llamada, porque la excepción ocurre antes de que se llamaran.
Hay una función Application_UnhandledException en mi App.xaml.cs, que captura todas las excepciones no controladas. Podría usar esto, pero parece una manera desordenada de hacerlo. Prefiero reservar esta función para los errores verdaderamente inesperados (también conocidos como errores) y no terminar con el código en esta función para cada circunstancia con la que me gustaría tratar de una manera específica.
¿Falta una solución obvia? ¿O estoy atrapado usando Application_UnhandledException?
[Editar]
Como se menciona a continuación, la propiedad Error es exactamente lo que estaba buscando. Lo que me está arrojando por un bucle es que el hecho de que se lanza la excepción y parece no haber sido detectada, sin embargo, la ejecución puede continuar. Desencadena el evento Application_UnhandledException y hace que VS2008 interrumpa la ejecución, pero continuar en el depurador permite que la ejecución continúe. No es realmente un problema, simplemente parece extraño.
Solo para aclarar, "devolución de llamada de método de servicio" significa evento completado de método, que no es una devolución de llamada. Las rellamadas se usan con APM, mientras que Silverlight usa el EAP. –
De acuerdo. Actualizado en consecuencia. – dcstraw