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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
	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.