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++Builder Discussion :

C++ Builder 6 & SOAP


Sujet :

C++Builder

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 24
    Par défaut C++ Builder 6 & SOAP
    Bonjour,

    Ayant très peu d'expérience dans l'univers du c++, je dois néanmoins reprendre une application développée dans ce merveilleux langage et y ajouter un certains nombre de fonctionnalités. Parmi celles-ci, l'application doit pouvoir contacter un web-service, et je fais face pour le moment à quelques soucis.

    J'évolue dans un environnement c++ Builder 6, et j'ai suivi les indications de ce tutoriel : http://www.hackerdude.com/2002/06/20...-cbuilder-pro/

    J'utilise un web-service de test actuellement : http://www.w3schools.com/webservices...vert.asmx?WSDL

    Aucun message d'erreur lors de la création des fichiers avec WSDL Importer.

    Le code client utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "tempconvert.h"
     
    [...]
     
    _di_TempConvertSoap tempConvert = GetTempConvertSoap(true);
    if ( tempConvert ) {
         labelRequest->Caption =   tempConvert->CelsiusToFahrenheit("0");
    }
     
    [...]
    GetTempConvertSoap est la fonction générée par WSDL Importer, et qui renvoie l'objet SOAP avec les bons paramètres.

    Pas de message d'erreur en soi, mais la fonction retourne "Error". D'après ce que je vois du code du web-service (http://www.w3schools.com/webservices/ws_example.asp), cela signifie que l'argument (normalement une chaine de caractères) passé en paramètre est vide ou n'est pas susceptible d'être transformé en nombre.

    J'aurais donc deux petites questions :
    - Tout d'abord, est-ce la bonne pratique?
    - Pourquoi l'argument n'arrive-t-il pas en bon état?

    Merci de m'avoir lu,

    Romain

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 076
    Par défaut
    N'hésite pas à jouer avec les options de l'importateur WSDL, en particulier "Unwind des paramètres littéraux"
    J'ai eu quelques soucis aussi pour la transmission de paramètre en mode "literal"
    L'importateur de Delphi 7 avait quelques bugs, l'implémentation du IInvokable aussi (TXSDate ne gérant que le format américain, problèmes de sérialization des énumérations)

    Lorsque j'en avais la possibilité, je forçais l'utilisation de encoded comme dans le sujet Importateur WSDL + Option Literal = Comportement non souhaité !
    le Serveur WS en PHP4 (NuSoap) ou PHP5 Zend WS semblait accepter des paramètres en mode "encoded" même si prévu à l'origine en litéral

    tu peux tricher en modifier la WSDL en local pour l'importateur comme je l'ai proposé dans le sujet Changer le format dans SOAP

    Code mxl : Sélectionner tout - Visualiser dans une fenêtre à part
    <soap:body use="literal" />
    en
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

    Personnellement, ensuite, je n'utilise plus la WSDL, la configuration du WS (IP+Port) est contenu dans la DB de l'application (le WS étant déployé sur plusieurs serveurs, c'est le même WS mais pour des clients différents)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 24
    Par défaut
    Bonjour ShaiLeTroll,

    Merci pour cette première réponse. Ca me donne quelques pistes à explorer.

    Je teste tout ça et te tiens au courant.

    Romain

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 24
    Par défaut
    Comme indiqué, j'ai modifié mon WSDL en changeant les "use".

    J'ai donc adapté mon code en fonction des nouveaux fichiers obtenus.

    Une jolie petite erreur apparait donc maintenant lors de l'appel :

    "No native to message converter set"

    Voici le code :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CelsiusToFahrenheit * ctf = new CelsiusToFahrenheit();
    ctf->Celsius = "0";
    CelsiusToFahrenheitResponse * ctfr;
     
    _di_TempConvertSoap tempConvert = GetTempConvertSoap(true);
    if ( tempConvert ) {
         ctfr =   tempConvert->CelsiusToFahrenheit(ctf);
    }



    Bref, après mûre réflexion, passer directement par le web-service n'était peut-être pas la meilleure idée. En effet, j'ai déjà du code PHP qui fait le boulot. Il serait donc plus facile dans mon cas de communiquer avec mon p'tit script PHP qui fait déjà le café, plutôt que de réécrire le tout du côté de mon appli c++.

    Je me renseigne donc de ce côté là... Si d'ailleurs, vous aviez quelques pistes... tout est bon à prendre !


    Je suis bien sûr toujours intéressé par toute remarque/réponse au problème lié au message d'erreur ci-dessus (histoire d'aller me coucher moins bête ce soir?)

    Romain

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 076
    Par défaut
    Sur le THTTPRIO cela utilise une URL directement ou via le WSDL !
    As-tu retiré les RegisterInvokeOptions ioLiteral comme je l'ai indiqué dans le sujet Importateur WSDL + Option Literal = Comportement non souhaité
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Choisir Visual c++ ou Borland C++Builder ?
    Par DevEric dans le forum Choisir un environnement de développement
    Réponses: 31
    Dernier message: 14/06/2007, 23h48
  2. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    Réponses: 10
    Dernier message: 12/03/2006, 22h33
  3. c++ builder JavaDoc :)
    Par JEG dans le forum C++Builder
    Réponses: 8
    Dernier message: 08/06/2002, 13h31
  4. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    Réponses: 1
    Dernier message: 26/04/2002, 09h59
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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