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 :

client SOAP en C++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 11
    Par défaut client SOAP en C++
    bonjour !

    je suis à la recherche de pistes, de conseils pour avancer dans mon application.

    Je dois développer un client soap en c++ sous linux qui lorsque la machine démarre envoit un message au serveur qui lui renvoit un identificateur de session et un temps qui définira le temps s'écoulant entre les notifcations de présence de la station cliente -> serveur (pour créer un fichier de log)

    voici ma source :

    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
    #include "soapH.h"
    #include "ClientRequestBinding.nsmap"
    #include <string>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    // pour utiliser le type string sans std::
    using namespace std;
     
     
     
    int main(int argc,char *argv[]){
    	int m;
    	// adresse du serveur
    	string adresse =(string)argv[1];
     
    	//fonction correspondant a la définition WSDL
    	ns1__ClientRequestResponse v_response ; 	
    	struct soap v_soap;
     
    	//initialisation de la socket
     	soap_init(&v_soap);
    	soap_set_namespaces(&v_soap, namespaces);
     
     	//gestion des timeout
    	v_soap.send_timeout = 10;
    	v_soap.recv_timeout = 10;
     
    	//appel de la fonction avec passage des arguments et retour d'une structure
            soap_call_ns1__ClientRequest(&v_soap, adresse.c_str(), "",argv[2],argv[3],argv[4],v_response);
     
     
    	 if (strcmp(argv[2],"BOOT")==0) 
    	 {
    		 //mise ne mémoire des données en retour;  	 
    		 int LogTime  = atoi(v_response.paramresp1.c_str()) ; //conversion char -> string -> int 
    		 string SessionId = v_response.paramresp2 ;
     
    	 }
     
     
     
    	if(v_soap.error)
           	{
     
    		 soap_print_fault(&v_soap, stderr);
     
    	}
     
    	soap_end(&v_soap);
     
    	return(0);	}
    Il faut donc utiliser la variable LogTime pour indiquer le temps pendant lequel la fonction "dormira" puis "se réveillera" pour envoyer son message.

    J'apprends le c++ "sur le tas" donc toute idée (constructive) est la bienvenue ;-)

    merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 11
    Par défaut re:
    Après avoir cherché sur le net, voici ou j'en suis :


    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    //librairires nécessaires à SOAP
    #include "soapH.h"
    #include "ClientRequestBinding.nsmap"
     
    //librairies nécessaires aux threads
    #include <pthread.h>
    #include <unistd.h>
     
    #include <string>
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
     
     
    // pour utiliser le type string sans std::
    using namespace std;
     
     
    //déclaration d'un mutex
    static pthread_mutex_t mutex;
     
     
    void* ThreadLog(void *p_tsoap)
    {
    	struct soap *v_soap = (struct soap*)p_tsoap;
    	for(;;)
    	{
     
    		pthread_mutex_lock(&mutex);
    		soap_call_ns1__ClientRequest(&v_soap , adresse.c_str() , "" , "LOG",sessionid, 0);
    		pthread_mutex_unlock(&mutex);	
    		sleep(10);
    	}
     
     
    }
     
    int main(int argc,char *argv[]){
    	int m;
    	pthread_t thread1;
    	// adresse du serveur
    	string adresse =(string)argv[1];
     
    	//fonction correspondant a la définition WSDL
    	ns1__ClientRequestResponse v_response ; 	
    	struct soap v_soap;
    	struct soap *v_tsoap;
     
    	//initialisation de la socket
     	soap_init(&v_soap);
    	soap_set_namespaces(&v_soap, namespaces);
     
     	//gestion des timeout
    	v_soap.send_timeout = 10;
    	v_soap.recv_timeout = 10;
     
    	//appel de la fonction avec passage des arguments et retour d'une structure
            soap_call_ns1__ClientRequest(&v_soap, adresse.c_str(), "",argv[2],argv[3],argv[4],v_response);
     
     
    	 if (strcmp(argv[2],"BOOT")==0) 
    	 {
    		 //mise ne mémoire des données en retour;  	 
    		 int LogTime  = atoi(v_response.paramresp1.c_str()) ; //conversion char -> string -> int 
    		 string SessionId = v_response.paramresp2 ;
    		 v_tsoap = soap_copy(&v_soap);
    		 pthread_create(&thread1 , NULL , (void* (*) (void*)) ,  ThreadLog , (void*)v_tsoap );
     
    	 }
     
     
     
    	if(v_soap.error)
           	{
     
    		 soap_print_fault(&v_soap, stderr);
     
    	}
     
    	soap_end(&v_soap);
     
    	return(0);	}
    30: erreur: "adresse" was not declared in this scope
    30: erreur: "sessionid" was not ....

    67: erreur: expected primary-expression before "void"
    67: erreur: expected ')' before "void"

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Au niveau écriture, quelque petites coquilles dans ton dernier code. Quelques détails à vérifier / corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ....
            // ICI, dans ta fonction ThreadLog, tu as un pb. : adresse est déclarée dans "main()" et donc "ThreadLog()" ne la connait pas (invisible) !
    	//soap_call_ns1__ClientRequest(&v_soap , adresse.c_str() , "" , "LOG",sessionid, 0);
    ...
            // adresse du serveur
    	// string adresse =(string)argv[1];
            string adresse(argv[1]);
    ...
    	//appel de la fonction avec passage des arguments et retour d'une structure
    	// pthread_create(&thread1 , NULL , (void* (*) (void*)) ,  ThreadLog , (void*)v_tsoap );
            pthread_create(&thread1 , NULL , thread_function,  ThreadLog , (void*)v_tsoap );
    Tu dois donc définir une fonction "thread_function()" qui sera demarrée dans un nouveau thread (le thread se terminant à la sortie de la fonction).

    Parce que avec ton "(void* (*) (void*))" je ne vois vraiment pas ce que tu essaye de faire ?

    Peut-être que "thread_function" pourrait être ta fonction "ThreadLog()" ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 11
    Par défaut
    tout d'abord merci d'avoir pris le temps de répondre !

    j'avoue que pour le (void*(*)(void*)) j'ai pris ca tel quel d'un exemple de code pour un serveur soap ..

    je continue à regarder à ca et je poste si j'avance !

Discussions similaires

  1. Problème avec le client soap
    Par miai26 dans le forum Services Web
    Réponses: 8
    Dernier message: 04/12/2007, 10h18
  2. [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
  3. [SOAP] navigateur comme client soap
    Par youp_db dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 18/11/2006, 17h50
  4. Passage d'un client SOAP de PHP à C
    Par olivier857 dans le forum C
    Réponses: 10
    Dernier message: 24/04/2006, 16h05
  5. Compo HTTP et client SOAP webservice ?
    Par Bruno13 dans le forum Web & réseau
    Réponses: 34
    Dernier message: 03/04/2006, 18h09

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