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 :
Le problème est que dans mon WSDL, l'url d'accès au webservice est en dur :
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));
Extrait de mon fichier.wsdl :
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).
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>
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 :
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 ?
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; }
Qu'en pensez-vous ? Avez-vous déjà rencontré cette problématique ?
kaboume.
Partager