Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Services Web
Services Web Forum d'entraide pour les services Web en PHP, qui permettent de créer et de consommer facilement des webservices (génération de WSDL etc.). Exemples : SOAP, NuSOAP, REST, SCA-SDO... Avant de poster -> Cours webservices
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2008, 15h32   #1
Invité régulier
 
Inscription : janvier 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 41
Points : 7
Points : 7
Par défaut [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 :
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 :
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
fragmonster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 18h58   #2
Membre éclairé
 
Homme
Développeur Web
Inscription : avril 2004
Messages : 319
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
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 : 319
Points : 325
Points : 325
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 !
Guybrush113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2008, 11h11   #3
Invité régulier
 
Inscription : janvier 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 41
Points : 7
Points : 7
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
fragmonster est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h52.


 
 
 
 
Partenaires

Hébergement Web