J’ai écrit le service suivant:
namespace WebService1 { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class Service1 : System.Web.Services.WebService { [WebMethod] public ssortingng Test(ssortingng str) { if (ssortingng.IsNullOrEmpty(str)) throw new SoapException("message", SoapException.ClientFaultCode); else return str; } } }
Et une application de base pour le tester (un bouton appelant la méthode Test
sur un événement clic):
private void button1_Click(object sender, EventArgs e) { ServiceReference1.Service1SoapClient ws = new WindowsFormsApplication1.ServiceReference1.Service1SoapClient(); try { ws.Test(""); } catch (SoapException ex) { //I never go here } catch (FaultException ex) { //always go there } catch (Exception ex) { } }
Je voudrais attraper l’ SoapException
par mon WebService, mais je vais toujours au bloc d’attrape FaultException
obtenir le message suivant:
System.Web.Services.Protocols.SoapException: message sur WebService1.Service1.Test (Ssortingng str) in […] WebService1 \ WebService1 \ Service1.asmx.cs: ligne 25
- Comment inclure mon propre wsdl dans mon service Web en C #
- Le formulaire de test est uniquement disponible pour les demandes de la machine locale
- Quel est le cycle de vie d’une demande de service Web ASP.NET?
- Conservez les espaces et les sauts de ligne lors de la sérialisation via le service Web ASMX
- Client WCF utilisant plusieurs services asmx utilisant des cookies HTTP
Comment attraper une véritable SoapException
et non une FaultException
? Y at-il quelque chose qui me manque dans le WebService?
Je pense que le “problème” principal est que vous utilisez une référence de service WCF se connectant à un service Web ASP.NET (.asmx).
Le moyen le plus “simple” de gérer cela serait probablement d’utiliser une référence Web au lieu d’une référence de service WCF sur le client. Pour ce faire, sélectionnez le bouton “Avancé” en bas de la boîte de dialog Ajouter une référence de service, puis Ajouter la référence Web en bas de cet écran. Je crois que l’utilisation d’une référence Web devrait vous donner une exception SoapException.
La bonne façon (si vous voulez suivre les conseils de Microsofts) serait de publier un service WCF au lieu d’un service .asmx. C’est un tout autre chapitre cependant ..
Lorsqu’un service ASMX lève une exception SoapException
, .NET renvoie un message d’erreur SOAP.
Une erreur SOAP est renvoyée à une référence de service en tant qu’exception de type FaultException
. Donc, vous ne verrez jamais une SoapException
.