Bonjour à tous,

Je requiers votre aide, car j'ai besoin de trouver rapidement une réponse à "Comment configurer Easyphp pour implémenter des Webservices à l'aide de SOAP et PHP5 ?"

Ce que j'ai fait jusqu'à présent :

- télécharger un petit exemple de webservice sur le net pour voir comment cela fonctionne.

- déposer l'ensemble dans un dossier ./webservice-exemple, dans le dossier ./www d'Easyphp

- le dossier contient 3 fichiers, index.php, test.php, serveur.wsdl, qui sont respectivement, la page de définition et de présentation des services du serveur, la page d'appel client, et la description WSDL des services.

- appeler dans le navigateur, l'URL http://127.0.0.1/webservice-exemple/index.php
>> donnait : "HTTP 500 erreur interne au serveur" après que j'ai décommenté "extension=php_soap.dll" dans php.ini, comme j'ai lu que SOAP était intégré à PHP5 (et redemarré le serveur bien-entendu), avant j'avais un appel à la lib SoapServer qui ne fonctionnait pas
>> donne après modification de la ligne de déclaration du serveur en
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$server = new SoapServer("http://127.0.0.1/webservice-exemple/server.wsdl");
l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SOAP-ENV:ServerBad Request. Can't find HTTP_RAW_POST_DATA
- appeler dans le navigateur, l'URL http://127.0.0.1/webservice-exemple/test.php
>> donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Fatal error: Uncaught SoapFault exception:
[HTTP] Unable to parse URL in C:\Program Files\EasyPHP 2.0b1\www\webservice-exemple\test.php:3
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', '', 'urn:MonWebServi...', 1, 0)
#1 C:\Program Files\EasyPHP 2.0b1\www\webservice-exemple\test.php(3): SoapClient->__call('hello', Array)
#2 {main} thrown in C:\Program Files\EasyPHP 2.0b1\www\webservice-exemple\test.php on line 3
Les 3 fichiers d'exemple :

- index.php (serveur) :

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
24
25
26
27
28
29
<?php
class MonWebService 
	{
   	function MonWebService()
   	{
   	}
   	/**
   	 * Dis bonjour...
   	 * @param string $qui
   	 * @return string
   	 */
   	function hello($qui)
   	{
   		return utf8_encode("Bonjour à toi : ".$qui);
   	}
}
$server = new SoapServer("server.wsdl");
$server->setClass("MonWebService");
$server->handle();
 
 
print "Ce web service MonWebService contient les méthodes suivantes :<br><ul>";
$aFuncs = $server->getFunctions();
for($i=0;$i<sizeof($aFuncs);$i++)
{
	print("<li>".$aFuncs[$i]."</li>");
}
print "</ul>";
?>
- test.php (client) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<?php
//$client = new SoapClient("server.wsdl");
$client = new SoapClient("http://127.0.0.1/webservice-exemple/server.wsdl");
$ret = $client->__call("hello",array('steph'));
print $ret;
?>
>> J'ai aussi testé la version commenté de ce code, même résultat.

- server.wsdl (fichier de description WSDL) :

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?xml version='1.0' encoding='UTF-8'?>
 
<!-- WSDL file generated by Zend Studio. -->
 
<definitions name="server" targetNamespace="urn:server" xmlns:typens="urn:server" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
	<message name="hello">
		<part name="qui" type="xsd:string"/>
	</message>
	<message name="helloResponse">
		<part name="helloReturn" type="xsd:string"/>
	</message>
	<portType name="MonWebServicePortType">
		<operation name="hello">
			<documentation>
				Dis bonjour...
			</documentation>
			<input message="typens:hello"/>
			<output message="typens:helloResponse"/>
		</operation>
	</portType>
	<binding name="MonWebServiceBinding" type="typens:MonWebServicePortType">
		<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
		<operation name="hello">
			<soap:operation soapAction="urn:MonWebServiceAction"/>
			<input>
				<soap:body namespace="urn:server" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
			</input>
			<output>
				<soap:body namespace="urn:server" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
			</output>
		</operation>
	</binding>
	<service name="serverService">
		<port name="MonWebServicePort" binding="typens:MonWebServiceBinding">
			<soap:address location=""/>
		</port>
	</service>
</definitions>

A priori, le WSDL émane de Zend Studio, donc la conf que j'utilise pour le faire tourner, n'est peut-être pas optimale, mais les contraintes que j'ai, font que je dois me contenter d'easyphp (v2.0.0.0) pour le moment.
J'ai peut-être aussi fait des boulettes, je ne suis pas exempt d'imperfections. Donc je fais appel à votre aiiiiiiiide.

Merci d'avance.

Keev