J'ai un service Web dans lequel j'ai créé une exception personnalisée. Disons que le nom de cette exception est InvalidContractException. p>
Ce que je voudrais faire, c'est si une étape spécifique se produit, je veux jeter cette exception. Cependant, je ne pouvais pas comprendre comment le client attraperait l'exception InvalidContractException afin de le gérer correctement. p>
Ceci est un service Web ASP.NET écrit en C # P>
3 Réponses :
Dans votre client appel au service WCF qui jette la faute, vous faites
Essayez .. p>
Défaut de capture comme défaillante (de votreservice.foobarfault) P> P> Essayez p>
Vous devez déclarer une condition erronée pour la méthode de service pouvant générer le défaut, par exemple p>
_ p>
Il utilise ASMX. Il l'appelle "Services Web ASP.NET"
Ah ok .. je pensais qu'il utilisait WCF
Vous ne pouvez pas faire cela:
Les services Web ASMX n'ont pas de support approprié pour les défauts de savon. Il n'y a aucun moyen d'obtenir une exception autre qu'une impression SOAPExException du côté du client. P>
Encore une autre raison de passer à la WCF. P>
comme exemple de ce que vous Ne peut pas em> faire avec asmx, voici comment fonctionne WCF. WCF vous permet de spécifier, pour chaque opération de service Web, qui défaut, il peut renvoyer: p> [ServiceContract]
public interface IMyServiceContract
{
[FaultContract(typeof(IntegerZeroFault))]
[FaultContract(typeof(SomeOtherFault))]
[OperationContract]
public string GetSomeString(int someInteger);
}
[DataContract]
public class IntegerZeroFault
{
[DataMember]
public string WhichInteger {get;set;}
}
[DataContract]
public class SomeOtherFault
{
[DataMember]
public string ErrorMessage {get;set;}
}
public class MyService : IMyServiceContract
{
public string GetSomeString(int someInteger)
{
if (someInteger == 0)
throw new FaultException<IntegerZeroFault>(
new IntegerZeroFault{WhichInteger="someInteger"});
if (someInteger != 42)
throw new FaultException<SomeOtherFault>(
new SomeOtherFault{ErrorMessage ="That's not the anaswer"});
return "Don't panic";
}
}
Si votre objectif est de lancer une exception afin qu'un utilisateur puisse savoir que quelque chose s'est mal passé, une exception spécifique s'est produite et une manipulation spéciale pour cela, vous avez une option. Vous devez juste compter sur une mise en œuvre correcte du proxy client (en effet, une option est de fournir les proxy clients vous-même). P>
Il y a un article utile Disponible ici sur la façon dont Essentiellement, il s'agit d'encoder vos détails d'exception (par exemple, un code d'erreur) dans le nœud de détail de la Il n'y a aucun moyen de recréer l'exception comme s'il était jeté sur la limite de service et il n'y a pas de moyen automagifique d'obtenir quoi que ce soit à l'exception d'une parfaite exception du côté du client. P> SOAPException code> S Work. P>
SOAPException code>, puis l'analysant sur le côté du client avant de retirer l'exception. P >