Détecter une exception SoapException émise par un WebService

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 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 .