12
votes

Comment attrapez-vous une exception de savon lancée d'un service Web?

Je jette quelques exceptions de savon dans mon service Web avec succès. Je voudrais attraper les exceptions et accéder à la chaîne et à la clientèle client appelée à l'exception. Voici un exemple de l'une de mes exceptions dans le service Web: xxx pré>

dans mon client, j'essaie d'exécuter la méthode du service Web pouvant lancer une exception et que je l'attrape. Le problème est que mes blocs de capture ne font rien. Voir cet exemple: P>

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


1 commentaires

Je me débats avec cela, créant une simple classe de réponse avec le message d'erreur est la meilleure option. Voir cette question et réponse: Stackoverflow.com/q/32058/945875


3 Réponses :


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

0 commentaires

8
votes

attrapez la SOAPEXException code> instance. De cette façon, vous pouvez accéder à ses informations:

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


7 commentaires

Juste pour être sûr que LO ne brisera pas son code avec ce changement, il peut ajouter un bloc supplémentaire capture (exception e) . Parfois, il est possible que l'exception ne soit pas SOAPException ... E.G.: OutofMemoryException ou problème de connectivité, ou Thread Abort, etc.


Cela fonctionne bien. Cependant, j'ai une question. Comment puis-je savoir ce que la chaîne est vraiment appelée afin que je puisse y accéder? Par exemple: E.GetString () ou quelque chose. Pour cet exemple particulier, je veux accéder à la chaîne "Vous perdez le jeu."


Je peux appeler E.Message qui renvoie un message d'erreur très long, mais je veux seulement le message de chaîne.


Louise, je ne connais pas votre situation, mais je suppose que vous pouvez créer des classes héritées de soapexception avec toutes les informations supplémentaires dont vous avez besoin. Ajoutez ensuite des blocs de capture pour ces classes avant Catching comme décrit ici.


Louise: E.Message Retours Exactement La même chaîne que celle transmise au constructeur, j'ai testé. Peut-être avez-vous utilisé une autre classe d'exception, qui a ajouté des informations supplémentaires à votre message?


Ou vous avez manipulé une autre exception, qui n'a pas été lancée par vous. Une telle exception peut se produire au côté du service, et il serait enveloppé à SOAPException par CLR.


Notez également que SOAPException.ClientfaultCode Selon MSDN "Spécifie un code d'erreur SOAP qui représente un appel client qui n'est pas formaté correctement ou ne contient pas les informations appropriées." C'est exactement ce que tu veux? Peut-être que vous devez utiliser un autre code ou un autre constructeur. Juste un avertissement.



11
votes

Vous voudrez peut-être attraper les exceptions spécifiques. XXX


1 commentaires

Cela ne répond pas à la question de Louise