2010-11-26 12 views
6

Llamo a un servicio web desde una aplicación Silverlight Windows phone 7 que funciona bien si el servicio web está disponible. Si el servicio web no está disponible, se captura una excepción no controlada, pero parece que no puedo atraparla. Mi intento es el siguiente:Windows phone 7, silverlight: cómo atrapar EndpointNotFoundException al llamar al servicio web asíncrono?

  //Get list of providers from Webservice 
     RSAServiceClient proxy = new RSAServiceClient(); 
     proxy.GetSuppliersCompleted += new System.EventHandler<GetSuppliersCompletedEventArgs>(ProxyGetSuppliersCompleted); 
     try 
     { 
      proxy.GetSuppliersAsync(); 
     } 
     catch (EndpointNotFoundException) 
     { 
      //TODO: Handle webserice not being available 
     } 
     catch (Exception) 
     { 
      throw; 
     } 

Pero esto no captura la excepción y, obviamente, no GetSuppliersCompleted de ser llamado así que no puedo cogerlo allí.

Pensé que podría detectarlo comprobando el estado de conexión (proxy.State) pero esto a pesar de que el servicio web no funciona devuelve CommunicationState.Opened.

¿Alguna idea es donde puedo manejar esto?

Disculpas si me he perdido algo pero he buscado y no he encontrado una solución.

Respuesta

8

Debe colocar su captura en su método ProxyGetSuppliersCompleted.

Un intento de acceso arrojará el error que está esperando.

Como alternativa en el ProxyGetSuppliersCompleted puede probar la propiedad Error de EventArgs que contendrá la excepción.

+1

ProxyGetSuppliersCompleted no se llama porque una EndpointNotFoundException se detecta como "no controlada" en Reference.cs que genera Visual Studio. – Fishcake

+2

Lo siento, lo malentendí. Porque mientras depuraba Visual Studio estaba entrando en Reference.cs, no continuaba. Si continúo la ejecución (o no estoy depurando), el error realmente se detecta en ProxyGetSuppliersCompleted. Aclamaciones. – Fishcake

+0

Gracias por los detalles Fishcake – alexandrekow

0

Le recomiendo que compruebe si tiene acceso a Internet antes de disparar la paz del código. Simplemente verifique si hay conexión de red y notifique al usuario si no.

+0

Definitivamente vale la pena hacerlo, pero no habría resuelto mi problema. – Fishcake

-1

Tengo exactamente el mismo problema. El comportamiento es diferente de Desktop-Silverlight donde se trata la excepción, en WindowsPhone-Silverlight, donde las excepciones de conexión no se manejan en absoluto.

creé un tema aquí: http://forums.create.msdn.com/forums/t/69485.aspx

Nadie tiene ninguna respuesta real. Ah, sí, hay un truco: puedes modificar manualmente los reference.cs para capturar la excepción manualmente ... Pero si tienes muchas funciones, se convierte en una pesadilla.

Tal vez los desarrolladores de Microsoft no probaron todas las aplicaciones de conexión, y se olvidaron de implementar esta (que es una gran).

+0

Puede detectar el error en el controlador para el método async (en mi ejemplo ProxyGetSuppliersCompleted). Esto funciona bien, ¿qué problemas sigues teniendo? – Fishcake

Cuestiones relacionadas