Attraper un SoapException jeté 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 string Test(string str)
{
if (string.IsNullOrEmpty(str))
throw new SoapException("message", SoapException.ClientFaultCode);
else
return str;
}
}
}
Et d'une application de base pour le tester (un bouton d'appel de la Test
méthode sur l'événement click):
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)
{
}
}
J'aimerais attraper le SoapException
jeté par mon WebService, mais je vais toujours à l' FaultException
bloc catch un qui comme message:
Système.Web.Services.Les protocoles.SoapException: message
au WebService1.Service1.Test(String str) en [...]WebService1\WebService1\Service1.asmx.cs:ligne 25
Comment ai-je pu attraper un réel SoapException
, et pas un FaultException
? Est-il quelque chose me manque le WebService?
Vous devez vous connecter pour publier un commentaire.
Je pense que le principal "problème" est que vous utilisez un Service WCF de Référence de la connexion à un ASP.NET Service Web.asmx).
La "meilleure" façon de traiter ce serait probablement utiliser un site Web de Référence au lieu d'un Service WCF de Référence sur le client. Pour ce faire, sélectionnez le bouton "Avancé" en bas de la boîte de dialogue Ajouter une Référence de Service, puis les Ajouter une Référence Web sur le bas de l'écran. Je crois que l'utilisation d'un site Web de Référence devrait vous donner une SoapException.
Dans le bon sens (si vous voulez suivre les directives de Microsoft conseils) serait de publier un service WCF au lieu d'une .asmx service. C'est un tout autre chapitre mais..
Lorsqu'un ASMX service jette un
SoapException
, .NET renvoie un message d'erreur SOAP.Une erreur SOAP est renvoyée à un service de référence comme une exception de type
FaultException
. Donc, vous ne verrez jamais unSoapException
.