IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Passage d'un client SOAP de PHP à C


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut Passage d'un client SOAP de PHP à C
    Bonjour à tous j'ai développé un Webservice assez simple en PHP.
    Le client envoie 3 données au service qui analyse celles-ci, va lire sa BDD et renvoie au client une réponse 1 ou 0 en fonction des données que celui-ci lui avait envoyé précédement. SOAP me permet donc de faire une bête fonction POST.

    Mais bon voilà j'ai dévelloppé tout ceci pour me familiariser avec SOAP. Je souhaiterai garder mon programme côté serveur en PHP mais par contre je souhaiterai transformer mon programme client PHP en code C pour Linux.

    Voici le code de mon serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?php
        include('../lib/nusoap.php');
     
        $serveur = new soap_server;
        $serveur->debug_flag=false;
        $serveur->register('CA');
     
        // FONCTION DE CONTROLE D'ACCES
        function CA($num_site, $num_term, $num_carte)
        {
            // CONNEXION AU SERVEUR SQL
            require("connect_bdd.php");
     
            // SELECTION D'UNE BASE
            $db_selected = mysql_select_db('ca', $link);
            if (!$db_selected)
            {
               die('Impossible de sélectionner la base de données : ' . mysql_error());
            }
     
            // REQUETE PERMETTANT DE COMPTER LE NOMBRE D'ENTREE CORRESPONDANT A LA COMBINAISON
            $requete = mysql_query("SELECT COUNT(num_carte) AS nb FROM autorisation WHERE
                num_site='$num_site' AND num_term='$num_term' AND num_carte='$num_carte'");
     
            if (!$requete)
            {
            die('Requête invalide : ' . mysql_error());
            }
     
            // RECUPERATION DU RESULTAT DE LA REQUETE
            $resultat = mysql_result($requete,0);
     
            // DEDUCTION DU DROIT D'ACCES EN FONCTION DU RESULTAT        
            if ($resultat==0)
            {
               $droit=0;
            }
            else
            {
               $droit=1;
            }
     
            // RETOURNE LE DROIT
            return "La <b>carte $num_carte</b> tente de badger sur le <b> terminal $num_term</b> du 
                <b>site $num_site</b>. <br><br> <b>Son droit d'accès est $droit</b>.";
     
            // FERME LE SERVEUR
            mysql_close($link);
        }
     
        $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA : '';
     
        // ENVOI LE RETOUR DE LA FONCTION AU CLIENT
        $serveur->service($HTTP_RAW_POST_DATA);
    ?>
    Et voici le code de mon client que je souhaite transformer en un client SOAP en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?
        include('../lib/nusoap.php');
     
        $client = new soapclient('http://127.0.0.1/Webservice_soap/CA/service_CA.php');
        $err = $client->getError();
     
        if ($err)
        {
            echo '<h2>Erreur de construction</h2><pre>' . $err . '</pre>';
        }
        else
        {
            // ENREGISTREMENT DES PARAMETRES
            $parametres = array('site'=>$_GET['num_site'],'terminal'=>$_GET['num_term'],'num_carte'=>$_GET['num_carte']);
            // APPEL LA FONCTION DU SERVEUR AVEC LES PARAMETRES 
            $recup = $client->call('CA', $parametres);
            // AFFICHE LE RESULTAT PROVENANT DU SERVEUR
            print $recup;
        }
    ?>
    Voilà, donc mon client se contente d'envoyer 3 variables au service ($_GET['num_site'], $_GET['num_term'] et $_GET['num_carte']). Ici les données proviennent d'un formulaire, c'était pour faire un test, mais imaginons pour faire le prog en C que les 3 valeurs des 3 variables sont inscrites en dur dans le code.

    Si quelqu'un peut m'aider à déveleppoer se client SOAP en C pour linux ca serait super cool.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    Pour commencer, il faudrait une librairie C qui utilise le XML pour faire du SOAP et parser le BODY de ton message SOAP.
    Ensuite, trois getValue(), un print et c'est terminé

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ok merci !

    Et tu pense à quoi comme librairie ?

  4. #4
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    salut, va voir ici si tu veux, jpoense que tu devrait trouver

    http://xmlrpc-c.sourceforge.net/

    il y a également des examples (à gauche)
    Wer nicht probiert, verliert !!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ok merci, mais ce lien parle de xml-rpc et non soap, c'est différent.

    Moi j'aurai souhaité utiliser le protocol soap.

  6. #6
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    désolé, je n'avais pas fais gaffe
    Wer nicht probiert, verliert !!

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    J'ai téléchargé et installé gSOAP 2.7.7, mais je n'arrive pas à faire fonctionner les exemples qui sont fournit sur le site.

    Site de gSOAP
    • Je créer un fichier d'entête .h comme dit sur le site et je le compile avec la commande suivante :
    Jusque là pas de pb :
    ** The gSOAP Stub and Skeleton Compiler for C and C++ 2.7.0d
    ** Copyright (C) 2001-2004 Robert van Engelen, Genivia, Inc.
    ** All Rights Reserved. This product is provided "as is", without any warranty.

    Saving soapStub.h
    Saving soapH.h
    Saving soapC.cpp
    ...
    ...
    Saving ns.divide.req.xml sample SOAP/XML request
    Saving ns.divide.res.xml sample SOAP/XML response
    Saving ns.nsmap namespace mapping table
    Saving ns.xsd XML schema

    Compilation successful
    Ici la compilation plante mais je ne comprend pas pourquoi.

    Voici les erreurs :
    In file included from soapH.h:10,
    from calc.c:1:
    soapStub.h:19: error: le C++ ISO interdit la déclaration de «
    SOAP_BEGIN_NAMESPACE » sans type
    soapStub.h: Dans function « int SOAP_BEGIN_NAMESPACE(soap) »:
    soapStub.h:19: error: erreur d'analyse syntaxique before `{' token
    soapStub.h:72: error: declaration of `struct SOAP_ENV__Header' in `int
    SOAP_BEGIN_NAMESPACE(soap)' which does not enclose `::'
    soapStub.h:72: embrouillé par les erreurs précédentes, abandon
    In file included from soapH.h:10,
    from soapC.cpp:8:
    soapStub.h:19: error: le C++ ISO interdit la déclaration de «
    SOAP_BEGIN_NAMESPACE » sans type
    soapStub.h: Dans function « int SOAP_BEGIN_NAMESPACE(soap) »:
    soapStub.h:19: error: erreur d'analyse syntaxique before `{' token
    soapStub.h:72: error: declaration of `struct SOAP_ENV__Header' in `int
    SOAP_BEGIN_NAMESPACE(soap)' which does not enclose `::'
    soapStub.h:72: embrouillé par les erreurs précédentes, abandon
    In file included from soapH.h:10,
    from soapClient.cpp:8:
    soapStub.h:19: error: le C++ ISO interdit la déclaration de «
    SOAP_BEGIN_NAMESPACE » sans type
    soapStub.h: Dans function « int SOAP_BEGIN_NAMESPACE(soap) »:
    soapStub.h:19: error: erreur d'analyse syntaxique before `{' token
    soapStub.h:72: error: declaration of `struct SOAP_ENV__Header' in `int
    SOAP_BEGIN_NAMESPACE(soap)' which does not enclose `::'
    soapStub.h:72: embrouillé par les erreurs précédentes, abandon

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Oui mais la c'est du C++, plus du C...
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Skyrunner
    Oui mais la c'est du C++, plus du C...
    Oui mais j'ai donné un exemple, c'est exactement pareil en C.
    Et dans mon cas je veux faire du C.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Enfin quand je compile le fichier d'entete avec la commande soapcpp2 ca me crée plein de fichier .cpp :
    soapStub.h -> header file with data type annotations
    soapH.h -> header file of soapC.cpp
    soapC.c -> SOAP/XML (de)serializers for C/C++ data types
    soapClient.c -> proxy stub routines for remote method calls
    soapServer.c -> skeleton routines for service implementation
    ...

    Mais après le client que je veut créer et compiler et bien en C et non en C++, par contre la commande de compilation fait appel a des .cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $ g++ -o fichier fichier.c soapC.cpp soapClient.cpp stdsoap2.cpp

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ca y est j'ai réussi en utilisant les commndes suivantes sur l'application exemple calc fournit avec gsoap (gsoap-2.7/soapccp2/samples/calc)

    Pour le fichier .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/olivier/gsoap-2.7/soapcpp2/src/soapcpp2 calc.h
    Pour les fichiers . c client et serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -I/home/olivier/gsoap-2.7/soapcpp2/ -o calcClient calcclient.c soapC.cpp soapClient.cpp /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -I/home/olivier/gsoap-2.7/soapcpp2/ -o calcServer calcserver.c soapC.cpp soapServer.cpp /home/olivier/gsoap-2.7/soapcpp2/stdsoap2.cpp
    Maintenant que j'arrive a compiler un exemple d'application SOAP avec gSOAP, il faut que je réécrive mon client SOAP PHP en client SOAP C.

Discussions similaires

  1. [Web Service] Implémentation d'un client SOAP (lib PHP)
    Par takoha dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/11/2010, 14h22
  2. Passage d'un client Soap de php en c++
    Par nounowa dans le forum C++
    Réponses: 3
    Dernier message: 16/09/2009, 12h44
  3. [Web Service] SOAP serveur PHP client J2EE
    Par mejdi331 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/02/2009, 03h08
  4. [SOAP] - Client/Serveur (C#/php)
    Par daguero dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 18/04/2008, 11h55
  5. [Web Service][SOAP] Client soap PHP et C#
    Par zulot dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/04/2007, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo