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 09/11/2007, 09h53   #1
Membre habitué
 
Inscription : juin 2004
Messages : 296
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juin 2004
Messages : 296
Points : 147
Points : 147
Par défaut [SOAP] génération WSDl à la volée par PHP

Hello,

J'ai un web service PHP 5 qui fonctionne nickel en loadant un fichier.wsdl se trouvant dans le même répertoire.

Exemple :
Code :
1
2
 
$server = new SoapServer('.fichier.wsdl',  array('trace' => 1, 'soap_version' => SOAP_1_1));
Le problème est que dans mon WSDL, l'url d'accès au webservice est en dur :
Extrait de mon fichier.wsdl :
Code :
1
2
3
4
5
6
7
 
<service name="WebServiceKaboume">
    <documentation>version 1.0</documentation>
    <port name="KABOUME_Port" binding="tns:KABOUME_Binding">    	
    	<soap:address location="http://localhost/webservice/webService.php"/>
    </port> 
 </service>
Quand je passe ce code sur une machine de production, cela ne fonctionne plus car l'url dans soap:adress n'est plus la même (nom de domaine change et surtout l'arborescence n'est pas la même).

Donc j'ai pensé généré le WSDL à la volée par PHP à partir d'un template de wsdl. A la volée PHP remplacerait l'URL de soap:address par la bonne URL récupérée via une fonction de ce type :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
	public static function get_url($bShowFileName = true,$bShowQueryString = true,$bShowPort = false)
	{
	    if(isset($_SERVER['HTTPS']))
	    	{$sUrl = 'https://';}
	    else
	    	{$sUrl = 'http://';}
 
	    $sUrl .= $_SERVER['HTTP_HOST'];
 
	    if($bShowPort)
	    	{$sUrl .= ':' . $_SERVER['SERVER_PORT'];}
 
		if ($bShowFileName)	
	    	{$sUrl .= $_SERVER['SCRIPT_NAME'];}
		else 
			{$sUrl .= dirname($_SERVER['SCRIPT_NAME'])."/";}
 
	    if( ($_SERVER['QUERY_STRING'] != null) && ($bShowQueryString) )
	    	{$sUrl .= '?' . $_SERVER['QUERY_STRING'];}
 
	    return $sUrl;
	}
Le problème est l'instanciation su serveur soap se fait à partir d'un fichier physique ($server = new SoapServer('.fichier.wsdl',) donc comment faire en sorte pour qu'il pointe vers le template wsdl modifié à la volée ?

Qu'en pensez-vous ? Avez-vous déjà rencontré cette problématique ?

kaboume.
kaboume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2007, 11h19   #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
Moi j'ai toujours changé à la main l'adresse, quand je place sur une autre machine le WebService.

Sinon pour répondre à ta question, si je l'ai bien comprise... Il faudrait juste que tu créées ou modifie ton fichier WSDL à chaque appel du serveur, enfin avant chaque instanciation du serveur SOAP.
Tu vas vraiment mettre ton webservice sur beaucoup de machines ? C'est pas plus simple d'écrire en dur l'adresse dans le WSDL ?
Guybrush113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2007, 11h23   #3
Membre habitué
 
Inscription : juin 2004
Messages : 296
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juin 2004
Messages : 296
Points : 147
Points : 147
Hello,

Merci de ta réponse.

Le problèmes est que je vais gérer des dizaines de web service de ce type là. Je ne me vois pas me palucher les dizaines de WSDL pour changer leur adresse.
kaboume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2007, 11h57   #4
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
Le truc que j'ai du mal à comprendre c'est qu'il ne faut pas que tu modifie ton fichier WSDL à chaque fois que quelque chose appele ton WebService, sinon ca fait du travail en plus inutile. Sauf si évidemment, si quelqu'un s'amuse à déplacer tes fichiers sur le serveur... Ce qui est assez idiot.

Donc à l'installation du serveur sur une nouvelle machine, lancer un petit travail php ou modification directe à la main dans le fichier WSDL ?
Ca dépends des gouts apparemment
Guybrush113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2007, 12h04   #5
Membre habitué
 
Inscription : juin 2004
Messages : 296
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juin 2004
Messages : 296
Points : 147
Points : 147
ouai je suis d'accord avec toi sur le fait de modifier à chaque fois le fichier. Mais de toute façon, le soap lit à chaque fois le fichier donc une fois qu'il l'a lu, je voudrai le modifier en mémoire...

Je vais ptete faire un script de déploiement.

C con, parceque dans les autres langages comme .net et java, le wsdl est généré à la volée, pas obligé de lire le fichier wsdl comme en php.
kaboume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2007, 12h23   #6
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
Ouais mais si t'as mal fait ton code .net ou java, ca te sort un WSDL en carton bancal, qui du coup change l'interopérabilité.
J'ai bien vu ca, j'ai fait un webservice avec un autre gars qui était en .net, il ne pouvait pas changer son fichier WSDL directement, obligé de changer le code...
Donc bon je trouve çà un peu bizarre
Guybrush113 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 00h41.


 
 
 
 
Partenaires

Hébergement Web