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

XML Discussion :

Visual C++ et Service Web


Sujet :

XML

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut Visual C++ et Service Web
    Bonjour,

    En PHP5, il est possible de créer un client web-service en quelques lignes à partir d'un fichier WSDL (celui qui a servit pour créer le service).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $client = new SoapClient($URLfichierWSDL); 
      // appel de la méthode getServerDate du service web
        $O =  $client -> __soapCall('getServerDate', array());
    J'aimerai faire l'équivalent en Visual C++ (ou en .NET mais faudra m'expliquer comment faire cohabiter du code VC++ 7 et VC++ .Net) qui utiliserait aussi directement le fichier WSDL et ne pas avoir avoir à redéfinir toute l'enveloppe SOAP.. Est-ce possible ? Et si oui...comment ?

    (déjà posté dans le forum dev windows..et redirigé ici)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Bon, j'ai réussi à ajouter un référence WEB à partir de fichier WSDL (qui n'était pas conforme, c'estpour ca que ca ne marchait pas au départ..)

    Il m'a alors créé un nomserveur.h qui contient les méthdes d'accès à mon WebServices...

    ET là, et bien, je n'arrive pas à récupérer la réponse 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
     
    int main(array<System::String ^> ^args)
    {
         // Création d'une instance de mon Service Web
    	 nomserveur::MyWebService ^monService = gcnew nomserveur::MyWebService();
     
         // Appel de la procédure distante getServerDate qui me renvoi un type complex MyResults contenant un String DateField
    	 nomserveur::MyResults ^ MonResults = monService->getServerDate(0);
     
    	 Console::WriteLine("Date du serveur : ");
    	 ;
    //On récupère la valeur de MonResults
    	 String ^ DateServ = MonResults->date;
     
    	 ;
         Console::WriteLine(DateServ);
    }
    J'ai une erreur à l'éxécution au moment de la récupération de la valeur de MonResults...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Une exception non gérée du type 'System.NullReferenceException' s'est produite dans TESTSAOP.exe
     
    Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.
    Une idée ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    J'ai réellement besoin d'aide là...

    En poussant plus loin, mon debug, le web-service est bien contacté, il renvoie bien une réponse..mais apparement, il arrive pas affecter la réponse à l'objet de type MyResults ..du coup, qd j'essaie d'y accéder, j'ai une erreur....


    S'il vous plait....

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Je déplace dans C++ où tu devrais avoir plus d'aide

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    les webservices, ca renvoit pas que des String ou des objets Xml ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Et bien ca devrait me renvoyer du code XML contenant un élément de type MyResult (type complex XML définit dans ma structure).

    Ce type MyResult devrait normalement être transformé lors du parsage de réponse par le C++ en un objet de la classe MyResult, classe qu'il a créé quand j'ai importé ma référence Web..

    Hors, apparement, il n'y arrive pas ...

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    j'ai pas trop fait de web services, mais essaie de mettre le retour dans un variable de type Xml. En si ca passe, faudra voir après à désérialiser

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Voilà a quoi ressemble mon objet retour en avec le client en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    stdClass Object
    (
        [date] => 2007-02-23 11:01:37
    )
    qui correspond ce qui est défini par le WSDL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    			<xsd:complexType name="MyResults">
    				<xsd:sequence>
    					<xsd:element name="date" type="xsd:string"/>
    				</xsd:sequence>
    			</xsd:complexType>
     
    qui est compris en PHP comme
       struct MyResults 
       {
         string date;
        }

    Lors de l'importation de ma référence Web dans Visual C++, il me créé un .h contenant notamment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        public ref class MyResults {
     
            private: System::String^  dateField;
     
            /// <remarks/>
            public:  property System::String^  date {
                System::String^  get();
                System::Void set(System::String^  value);
            }
        };
    Donc, apparement, il comprend bien le type attendu..

    Sinon, lors de l'importation de ma référence WEB, je peux lire :
    1>R2717: La liaison rpc-literal d'une DESCRIPTION DOIT comporter un attribut d'espace de nom spécifié et la valeur de cet attribut DOIT être une URI absolue qui se rapporte aux éléments soapbind:body qu'elle contient ..
    Pourtant XML-Spy me valide mon WSDL sans probleme...

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    désolé, je ne connais pas assez pour t'aider.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Bon, j'ai réussi à faire un fichier WSDL validé par XML Spy qui fonctionne dans PHP et qui ne lève pas d'erreur en importation sous Visual C++ .. On va voir à l'utilisation...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    ET ca marche toujours pas, mon objet créé en réponse n'est pas instancié..

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Bon, en reprenant mon WS pour qu'il n'envoit qu'un String, ca fonctionne très bien...

    C'est les types complexes qui sont pas très bien compris...il faut apparement utiliser un Mapper..mais j'ai pas encore tout compris..

  13. #13
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    moi, du temps où j'utilisais des WS, je ne pouvais renvoyer que du String ou du XML

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Oui, un WS ne renvoie que du XML, mais il peut renvoyer un XML contenant des informations structuré qui pourront être transformé en variable, Ce sont les "ComplexType" de XML qui sont en fait des structs.

    Normalement, la gestion des "Référence Web" de Visual Studio, permet d'utiliser un service Web programmé dans n'importe quel langage grave au fichier de description WSDL.

    Dans ce fichier, on détermine les formats de retour, des types simple ou des structures complextype.
    Lors de l'importation, le compilateur interprète les ComplexType est créé les classes correspondantes avec les méthodes d'accès qui vont bien...
    Cela marche très bien, en tout pour la définition des types..

    Mais dès que j'essaie de créer ma fameuse variable du type struct (à partir du ComplexType que je reçois en réponse du WS), ca n'a pas l'air de marcher...

  15. #15
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    et si tu le faisais en deux fois ?
    d'abord tu récupères le xml et ensuite tu désérialises dans ton objet ?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Ouais, ca veut dire que j'utilise pas le truc "tout fait" de Visual qui permet de créer directement la méthode et que je fais moi meme la connection au webservice...

    J'aimerai si possible ne pas avoir à faire ca..l'outil de µ$ semble bien fait...autant s'en servir

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/07/2014, 21h31
  2. Intégration de source Visual Paradigm dans un Web Service
    Par marc85 dans le forum Web & réseau
    Réponses: 0
    Dernier message: 27/11/2012, 13h41
  3. Livre : XML et les services Web
    Par cyberzoide dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 27/05/2007, 17h12
  4. Visual C++ 2005 et Web Services
    Par alexadvance dans le forum Windows
    Réponses: 2
    Dernier message: 21/02/2007, 10h01
  5. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28

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