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

Bibliothèques C++ Discussion :

Web Service Gsoap


Sujet :

Bibliothèques C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Par défaut Web Service Gsoap
    Bonjour tout le monde.

    Je travaille sur un web service à généré par Gsoap.
    J'expose mon problème.
    J'ai un tableau de float à envoyer.
    J'utilise l'exemple de Gsoap du One-Dimensional Dynamic SOAP Arrays qui utilise un pointeur et la taille du tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct some_name 
    { 
       Type *__ptr; // pointer to array of elements in memory
       int __size; // number of elements pointed to 
       [[static const] int __offset [= ...];] // optional SOAP 1.1 array offset 
       ... // anything that follows here will be ignored 
    };
    Dans mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ns__gpioAnalogRead(int Channel, int nSample, struct Data_Read{float* __ptr; int __size;} &DR);
    Le tableau est rempli :
    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
     
    int ns__gpioAnalogRead(struct soap* soapPRM,int Channel,int nSample, struct Data_Read &DR)
    {
            int i=0;
    	DR.__ptr=(float*)malloc(nSample*sizeof(float));
    	DR.__size=nSample;
    	for(i=0;i<nSample;i++)
    	{
    		*DR.__ptr=5.0000;
    		DR.__ptr=DR.__ptr+sizeof(float);
    	}
    	DR.__ptr=DR.__ptr-(sizeof(float)*nSample);
    	return SOAP_OK;
    	free(DR.__ptr);
    }
    En affichant dans la console les valeurs contenues dans DR.__ptr, j'ai bien la valeur 5 partout.

    Ensuite je capture à l'aide de Wireshark le paquet contenant le fichier XML et mon tableau et la surprise, les données qu'il contient sont fausses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
     
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:rpiGpio">
    <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <ns:gpioAnalogReadResponse>
    <DR SOAP-ENC:arrayType="xsd:float[25]" xsi:type="SOAP-ENC:Array">
    <item>5</item><item>0</item><item>-0.346070766</item><item>0</item><item>5</item><item>1.40129846E-45</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item>
    </DR>
    </ns:gpioAnalogReadResponse>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    On remarque une suite de 5 et de 0 avec des valeurs intercalées.
    Si quelqu'un a un début d’explication je suis preneur.
    Merci,
    Damien,

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    code assez difficile à lire, et surtout faux. Enfin, je n'ai jamais utilisé Gsoap.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return SOAP_OK;
    	free(DR.__ptr);
    Fuite mémoire.
    Je ne parviens pas à déchiffrer le reste et ce que tu essayes de faire.. Mais si c'est sensé partir sur le réseau, les malloc au milieu de la struct me paraissent pour le moins suspect
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. [AXIS][WEB SERVICES] .xsd
    Par cosmos38240 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 16/07/2004, 15h55
  2. [web service] pb interoperabilité?
    Par david42 dans le forum Services Web
    Réponses: 3
    Dernier message: 02/03/2004, 14h01
  3. [WebService]Fichier Java et WSDL associé pour Web Services
    Par P4_le_requin_breton dans le forum Services Web
    Réponses: 9
    Dernier message: 23/02/2004, 12h55
  4. [JBuilder][Web Services] à partir de quelle version?
    Par sicard_51 dans le forum JBuilder
    Réponses: 2
    Dernier message: 25/08/2003, 12h54
  5. [Kylix] problème web service kylix
    Par RezzA dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2003, 14h50

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