Retourner une Exception à un client WCF

Un exception en WCF est définie grâce à une FaultException contenant un "Object DataContractSerializable".

Cet object est la raison de votre exception, sa cause.

Prenons comme exemple un simple login(string nom, string mdp);

  1. Il nous faut premièrement définir l' "Object DataContractSerializable" que nous allons utiliser pour expliquer au client pourquoi la fonction ne peut pas se dérouler avec succes:
    [code:c#]
    namespace myWCFService
    {
        [DataContract]
        public class myWCFServiceFault
        {
            private string _msg;
  2.         [DataMember]
            public string Msg
            {
                get { return _msg; }
                set { _msg = value; }
            }

            public myWCFServiceFault(string m)
            {
                this._msg = m;
            }
        }
    }

    [/code}

  3. Ensuite, il va nous falloir signaler au client que cette fonction peut éventuellement lancer une FaultException contenant une raison de type myWCFServiceFault.
    Ceci se définit dans l'interface de notre service :
    [code:c#]
    namespace myWCFService
    {
  4.      [ServiceContract(SessionMode=SessionMode.Required)]
         public interface ImyWCFService    
         {     

             [OperationContract]
             [FaultContract(typeof(myWCFServiceFault))]
             void Login(string Login, string Mdp);
         }
    }
    [/code}

  5. Dans l'implémentation de ce web service, il nous suffit alors de lancer inocament une FaultException, elle sera envoyée au client :
    [code:c#]
    namespace myWCFService
    {
        public class myService: ImyWCFService
        {
            public void Login(string login, string Mdp)
            {
                if(login == "")
                    throw new FaultException<myWCFServiceFault>(new myWCFServiceFault("login ne peut pas être vide!"));
            }
        }
    }
    [/code]
  • Coté client maintenant, il nous suffit d'attraper au vol cette exception :
    [code:c#]
    try
                {
                    myService.Login("Togis", "PasswordSuperSecret");
                }
                catch (FaultException<myWCFServiceFault> fex)
                {
                    Console.WriteLine("FaultException > " + fex.Detail.Msg);
                }
                catch (FaultException faultEx)
                {
                    Console.WriteLine("An unknown exception was received. "
                      + faultEx.Message
                      + faultEx.StackTrace);
                }
    [/code]

    Notez qu'il existe un catch d'une FaultException non générique, pour pouvoir l'utiliser, il faut tout d'abord utiliser un autre constructeur de la FaultException :
    [code:c#]
    throw new FaultException<MiniMixFault>(myWCFServiceFault Exception,FaultReason reason);
    [/code]
  • Et le tour est joué ;)

    Posted on 05/11/2007 17:56:00 by Togis

    Permalink | Commentaires (0) | Post RSSRSS comment feed |

    Categories: .NET 3.5 | WCF

    Tags:

    Actuellement noté 2.3 par 3 personne(s)

    • Currently 2,333333/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    Billets liés

    Ajouter un commentaire


    (Affichera votre icône Gravatar)  

      Country flag





    Live preview

    août 20. 2008 15:59