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 et frameworks PHP Discussion :

[Web Service][SOAP] Espace de nom dans l'entête SOAP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 37
    Points
    37
    Par défaut [Web Service][SOAP] Espace de nom dans l'entête SOAP
    Bonjour,
    J'ai un service web qui tourne en .NET
    Je dois développer un client en PHP5. J'ai un problème de formattage de mon en-tête SOAP. En effet, il semblerait que le préfixe du namespace n'est pas appliqué à toutes les balises :

    Voilà le message SOAP que PHP envoie :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://www.toto.com/">
    	<env:Header>
    		<ns1:AuthHeaderUidSite>
    			<UID>xxx</UID>
    			<Site>102</Site>
    		</ns1:AuthHeaderUidSite>
    	</env:Header>
    	<env:Body>
    		<ns1:HelloWorld>
    			<ns1:nom>LI</ns1:nom>
    			<ns1:day>2008-01-17T14:46:37</ns1:day>
    		</ns1:HelloWorld>
    	</env:Body>
    </env:Envelope>
    Le préfixe "ns1" en rouge est bien placé sur la balise <AuthHeaderUidSite> mais n'apparaît pas sur <UID> et <Site>, du coup, côté server, ma méthode web .NET n'arrive pas à les récupérer. Pour elle, c'est comme si il n'y avait pas de donnée dans <AuthHeaderUidSite>.

    Voici le code PHP que j'utilise :

    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
     
    class AuthHeaderGuidSite {
      private $UID;
      private $Site;
      public function __construct($uid,$site) {
         $this->UID=$uid;
         $this->Site=$site;
      }
    }
     
     
    $ns = "http://www.toto.com/";
    $client = new SOAPClient($wsdl,$options);
     
    $GUID = "xxx";
    $site = 102;
    $Auth1 = new AuthHeaderUidSite($GUID,$site);
    $headerBody = new SOAPVar($Auth1,SOAP_ENC_OBJECT);
    $header = new SoapHeader($ns,'AuthHeaderUidSite',$headerBody,false);
     
    $day = date('Y-m-d\TH:i:s');
    $params = array("nom"=>"LI", "day"=>$day);
    $s = $client ->__soapCall("HelloWorld",array($params),NULL,array($header));
    Comment faire pour que le namespace s'applique aux membres de ma classe AuthHeaderGuidSite ?

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Désolé je ne vois pas trop le pourquoi du problème

    Je vois que tu utilises un WSDL, tu devrais peut-être essayer de jouer la dessus. Le role du WSDL c'est de formater tes requêtes, dont les namespaces.

    Mais j'ai jamais trifouillé les headers donc je me trompe peut-être.

    Bon courage !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 37
    Points
    37
    Par défaut
    Mon problème est du côté .NET lorsque que veux récuperer les données contenues dans le header.

    A cause de la formulation du header :
    <env:Header>
    <ns1:AuthHeaderUidSite>
    <UID>xxx</UID>
    <Site>102</Site>
    </ns1:AuthHeaderUidSite>
    </env:Header>

    J'imagine que lorsque .NET désérialise la classe AuthHeaderUidSite, comme elle est préfixée dans le XML par ns1 et pas ses membres, le serializer .NET considère qu'il n'y a pas de membre. Si je préfixe UID et Site par ns1 à la main et que j'envoie le tout, là ça fonctionne.

    Mais je ne sais pas comment faire pour que soit :
    - Php me sérialise correctement mon AuthHeaderUidSite avec les bon namespave
    - Ou que mon code .NET comprenne le header envoyé par PhP

Discussions similaires

  1. [XL-2007] Web Service SOAP Fichier WSDL / Extraction des données dans un classeur
    Par crusaders dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/12/2014, 12h05
  2. Utiliser un objet dans un Web Service Soap Client
    Par benny-blanco dans le forum Services Web
    Réponses: 1
    Dernier message: 19/04/2012, 09h23
  3. affichage des données provenant d'un web service soap dans une listview
    Par nagca dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 04/07/2011, 17h11
  4. web services, soap et compression.
    Par renaudjuif dans le forum Langage
    Réponses: 6
    Dernier message: 31/07/2006, 15h44
  5. [Web Service] [SOAP] Envoie requete
    Par _beber85 dans le forum JDBC
    Réponses: 1
    Dernier message: 08/06/2006, 09h31

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