Créer et consommer un service web PHP en C#
Bonjour,
Voilà plusieurs jours que j'essaie de consommer un webservice que je créé en PHP depuis Visual Studio.
J'ai créé la partie serveur, le serveur PHP et le fichier WSDL (généré via l'application gratuite DIA et UML2PHP5).
1) Je créé mon schéma UML (une classe avec une fonction : Horloge, HeureExacte())
2) J'exporte mon fichier .wsdl
3) Je créé la partie serveur PHP
Le fichier wsdl généré :
Code:
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
| <?xml version="1.0" encoding="UTF-8"?><!--
This file has been generated by UML2PHP5
UML2PHP5 is free and released under GPL
Copyright KDO kdo@zpmag.com
UML2PHP5 : uml2php5.zpmag.com
--><definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:webservice" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="WebServices" targetNamespace="urn:webservice">
<message name="HelloWorldRequest"/>
<portType name="HorlogePortType">
<operation name="HelloWorld">
<input message="tns:HelloWorldRequest"/>
</operation>
</portType>
<binding name="HorlogeBinding" type="tns:HorlogePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="HelloWorld">
<soap:operation soapAction="urn:HorlogeAction"/>
<input>
<soap:body use="encoded" namespace="urn:xmethods" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
</operation>
</binding>
<service name="Webservice">
<port name="HorlogePort" binding="tns:HorlogeBinding">
<soap:address location="http://URL/soap_server.php?action=Horloge"/>
</port>
</service>
</definitions> |
Le serveur SOAP PHP :
Code:
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 39 40 41 42 43 44
|
<?php
/**
* Code generated by dia-uml2php5 plugin
* written by KDO kdo@zpmag.com
*/
// première étape : désactiver le cache wsdl lors de la phase de test
ini_set("soap.wsdl_cache_enabled", "0");
function HelloWorld()
{
return ("Hello World !");
}
$wsdl = 'Webservices.wsdl';
//Création du serveur SOAP avec le fichier WSDL
$server = new SoapServer($wsdl);
//Ajout de la classe Math dans les éléments proposés par le WebService
$server->addFunction("HelloWorld");
//l'utilisation du WebService se fera toujours par la méthode POST
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$server->handle();
}
else //dans le cas contraire, la page affichera les méthodes proposées par le WebService
{
echo '<h4>Ce serveur SOAP peut gérer les fonctions suivantes : </h4><ul>';
$functions = $server->getFunctions();
foreach($functions as $func)
{
echo '<li>'.$func.'</li>';
}
echo '</ul>';
}
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle();
?> |
4) Je créé le client soap php pour tester mon webservice mais rien ne s'affiche :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
$wsdl = "http://url/Webservices.wsdl";
$client = new SoapClient($wsdl);
echo $client->HelloWorld(); |
Je précise que tous les fichiers sont dans le même répertoire sur le serveur;
Une fois que j'aurai réussi à appeler mon service en PHP, quel fichier dois-je appeler dans Visual Studio lorsque je veux ajouter mon service web, soap_server.php ou bien Webservices.wsdl ?
Je ne comprends pas le lien entre le wsdl et le serveur soap php. Ils s'appellent mutuellement et j'aimerais retrouver mes classes en C# pour les utiliser ensuite.
Merci par avance pour votre aide.
KibitO