L’utilisation de XML-RPC.NET

Publié dans: 

Ayant travaillé récemment sur un sujet qui me parait intéressant, j’ai le plaisir de partager avec vous cet article concis. Le but est d’introduire XML-RPC.NET et fournir les éléments nécessaires pour pouvoir développer votre propre application reposant sur une architecture client/serveur.

Commençons par exprimer l’intérêt d’XML-RPC :

  • Envoie de données complexes via internet en utilisant le protocole HTTP pour le transport et XML pour l’encodage

  • S’affranchir de la nature du client qui peut être une application console, web, winforms,…

L’utilisation de XML-RPC.NET passe par plusieurs étapes. Pour être plus explicite je vais traiter cet exemple: Créer un service qui est capable de faire l’addition, la soustraction, la multiplication et la division de deux nombres.

Notre service contiendra un serveur RPC qui exécute les opérations mathématiques à la demande du client.

  1. Définir les structures de données :Pour traiter l’exemple, on peut se contenter du renvoi de types simples. Mais pour démontrer plus d’intérêt, on envisagera une structure de données qui comporte le résultat de l’opération et une information sur le bon déroulement de l’opération.Notre structure qu’il faut déclarer côté serveur et client ressemblerait à : 

    Public struct MathStruct{
        Public double resultatOperation ;
        Public string  informationOperation ;
    }

    Il arrive qu’on ait besoin de mettre une variable de la structure XML-RPC à null. Ce cas est à prévoir explicitement et la démarche à suivre est très simple.

    Supposons que la variable informationOperation peut être à null. La déclaration de la structure devient: 

    Public struct MathStruct{
    Public double resultatOperation ;
    [XmlRpcMissingMapping(MappingAction.Ignore)] //permet d’accepter des valeur null
    Public string  informationOperation ;
    }
  2. Implementation des méthodes coté serveur :

    Pour que nos méthodes soit accessibles via XML-RPC.NET il faut dériver une classe de Xml-RpcService et implémenter les méthodes à exposer et en informer XML-RPC.NET. Exemple : 

    Public class MathServ :XmlRpcService
    {
        [XmlRpcMethod("MathServ.Add")] // déclaration de la méthode à exposer par XML-RPC.NET
        Public MathStruct AddNumbers(double firstNumber,double SecondNumber)
         {
                //votre implémentation
         }
        [XmlRpcMethod("MathServ.Sub")]
        Public MathStruct SubNumbers(double firstNumber,double SecondNumber)
         {
                //votre implémentation
         }
        [XmlRpcMethod("MathServ.Mul")]
        Public MathStruct MulNumbers(double firstNumber,double SecondNumber)
         {
                //votre implémentation
         }
        [XmlRpcMethod("MathServ.Div")]
        Public MathStruct DivNumbers(double firstNumber,double SecondNumber)
         {
                //votre implémentation
         }
    } 
  3. Implementation des méthodes coté client:Coté client, deux étapes et c’est fait :
    Déclarer les méthodes accessibles à distance dans une interface qui dérive de IxmlRpcProxy.
    créer un proxy dans la classe qui appelera les méthodes distantes.Ce proxy définit l’url cible et la méthode à appeler. Public interface ICallMathServ :IxmlRpcProxy
    {
      [XmlRpcMethod("MathServ.Add")]
      MathStruct AddNumbers(double firstNumber,double SecondNumber) ;
      [XmlRpcMethod("MathServ.Sub")]
      MathStruct SubNumbers(double firstNumber,double SecondNumber) ;
      [XmlRpcMethod("MathServ.Mul")]
      MathStruct MulNumbers(double firstNumber,double SecondNumber) ;
      [XmlRpcMethod("MathServ.Div")]
      MathStruct DivNumbers(double firstNumber,double SecondNumber) ;
    }
    Dans un autre fichier : 
    Public class CallMathServ
    {
        Private IcallMathServ proxy ;
        Public CallMathServ()
        {
               proxy=(IcallMathServ)XmlRpcProxyGen.Create(typeof(IcallMathServ));
               proxy.Url= » http://monurl.MathServ.rem» ;//vous dever spécifier une url valide à votre application
        }
        Public MathStruct AddNumbers(double firstNumber,double secondNumber)
        {
               return proxy.AddNumbers(fisrtNumber,secondNumber) ;
        }
        Public MathStruct SubNumbers(double firstNumber,double secondNumber)
        {
                return proxy.SubNumbers(fisrtNumber,secondNumber) ;
        }
        Public MathStruct MulNumbers(double firstNumber,double secondNumber)
        {
                return proxy.MulNumbers(fisrtNumber,secondNumber) ;
        }
        Public MathStruct DivNumbers(double firstNumber,double secondNumber)
        {
                return proxy.DivNumbers(fisrtNumber,secondNumber) ;
        }
    }
  4. Configuration:

    Pour configurer notre service il suffit de rajouter ces lignes dans le fichier web.config dans <httpHandlers/>. 
    <add verb="*" path=" MathServ.rem" type="MathServ,MathServ" />

    Une petite explication de l’attribut type. Le premier paramètre est le nom de la classe qui implémente les méthodes distantes. Le second est le nom de la DLL ou se trouve cette classe.

    Maintenant vous êtes capables d’écrire vos propres services XML-RPC N’hésitez pas à me faire parvenir vos retours et me poser vos questions. Les réponses sont gratuites!

    Téléchargez gratuitement le code de l’exemple donné (client et serveur):

    Pour aller plus loin :

    Références

    XML-RPC.NET FAQ