2010-11-26 5 views
6

J'appelle un service Web à partir d'une application Silverlight Windows Phone 7 qui fonctionne correctement si le service Web est disponible. Si le service Web n'est pas disponible, une exception non gérée est interceptée, mais je ne semble pas capable de l'attraper moi-même. Ma tentative est la suivante:Windows Phone 7, silverlight - Comment intercepter EndpointNotFoundException lors de l'appel du service Web asynchrone?

  //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; 
     } 

Mais cela ne veut pas attraper l'exception et, évidemment, GetSuppliersCompleted jamais ce qu'on appelle je ne peux pas l'attraper là-bas.

J'ai alors pensé que je pourrais être capable de le détecter en vérifiant l'état de la connexion (proxy.State) mais cela malgré le fait que le service web ne fonctionne pas retourne CommunicationState.Opened.

Une idée est où je peux gérer cela? Excuses si j'ai manqué quelque chose mais j'ai cherché et n'ai pas trouvé une solution.

Répondre

8

Vous devez placer votre capture dans votre méthode ProxyGetSuppliersCompleted.

Une tentative d'accès au résultat lancera l'erreur que vous attendez.

En variante, dans le ProxyGetSuppliersCompleted vous pouvez tester la propriété Error des EventArgs qui contiendra l'exception.

+1

ProxyGetSuppliersCompleted n'est pas appelé car une exception EndpointNotFoundException est interceptée comme "non gérée" dans Reference.cs qui est générée par Visual Studio. – Fishcake

+2

Désolé, j'ai mal compris. Parce que pendant le débogage de Visual Studio se cassait dans Reference.cs je ne continuais pas. Si je continue l'exécution (ou ne débogue pas) l'erreur est en effet attrapée dans ProxyGetSuppliersCompleted. À votre santé. – Fishcake

+0

Merci pour le détail Fishcake – alexandrekow

0

Je recommande de vérifier si vous avez accès à Internet avant de tirer le code. Vérifiez simplement s'il y a une connexion réseau et notifiez l'utilisateur si ce n'est pas le cas.

+0

Vaut vraiment la peine de le faire, mais il n'aurait pas résolu mon problème. – Fishcake

-1

J'ai exactement le même problème. Le comportement est différent de Desktop-Silverlight où l'exception est gérée, à WindowsPhone-Silverlight où les exceptions de connexion ne sont pas du tout gérées.

Je créé un sujet ici: http://forums.create.msdn.com/forums/t/69485.aspx

Personne n'a une réponse réelle. Ah, oui, il y a une astuce: vous pouvez modifier manuellement la référence.cs afin d'attraper manuellement l'exception .... Mais si vous avez beaucoup de fonctions, cela devient un cauchemar.

Peut-être que les développeurs Microsoft n'ont pas testé toutes les connexions de connexion, et ils oublient d'implémenter celui-ci (qui est un gros).

+0

Vous pouvez intercepter l'erreur dans le gestionnaire de la méthode async (dans mon exemple ProxyGetSuppliersCompleted). Cela fonctionne bien, quels problèmes avez-vous encore? – Fishcake