<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Jérémie Bertrand &#187; PHP</title>
	<atom:link href="https://blog.developpez.com/laedit/pcategory/php/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/laedit</link>
	<description></description>
	<lastBuildDate>Tue, 22 Mar 2011 14:30:08 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>WebService PHP consommé par une application C#</title>
		<link>https://blog.developpez.com/laedit/p7381/c/i_webservice_php_consomme_par_une_applic</link>
		<comments>https://blog.developpez.com/laedit/p7381/c/i_webservice_php_consomme_par_une_applic#comments</comments>
		<pubDate>Wed, 18 Mar 2009 20:57:48 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Divers]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WebService]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Pour créer un WebService facilement en PHP, il faut travailler en PHP5 avec l’extension SOAP d’activée. Pour cela, le mieux est de travailler en local avec Wamp Server (Wamp 5), qui permet d’activer cette extension. Une fois le matériel prêt, on va commencer par ouvrir notre éditeur de PHP préféré et d’écrire la classe qui être utilisé par le WebService. Dans notre exemple, on va juste définir une petite classe chargée de faire une opération [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Pour créer un WebService facilement en PHP, il faut travailler en PHP5 avec l’extension SOAP d’activée. Pour cela, le mieux est de travailler en local avec Wamp Server (Wamp 5), qui permet d’activer cette extension.</p>
<p><span id="more-13"></span></p>
<p>Une fois le matériel prêt, on va commencer par ouvrir notre éditeur de PHP préféré et d’écrire la classe qui être utilisé par le WebService.<br />
Dans notre exemple, on va juste définir une petite classe chargée de faire une opération et une soustraction :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">class Math <br />
{ <br />
&nbsp;<br />
&nbsp; public function Add($a, $b) <br />
&nbsp; { <br />
&nbsp; &nbsp; return $a + $b; <br />
&nbsp; } <br />
&nbsp; <br />
&nbsp; public function Substract($a, $b) <br />
&nbsp; { <br />
&nbsp; &nbsp; return $a - $b; <br />
&nbsp; } <br />
&nbsp;<br />
}</div></div>
<p>Voilà donc les méthodes qui seront exposées part le WebService.<br />
Il ne reste plus qu’à créer le serveur et la partie PHP sera terminée.<br />
 Pour cela, nous allons utiliser la classe SoapServer :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">require 'Math.class.php'; <br />
&nbsp;<br />
// première étape : désactiver le cache wsdl lors de la phase de test <br />
ini_set(&quot;soap.wsdl_cache_enabled&quot;, &quot;0&quot;); <br />
&nbsp;<br />
$wsdl &nbsp;= 'WebService.wsdl'; <br />
//Création du serveur SOAP avec le fichier WSDL <br />
$server = new SoapServer($wsdl); <br />
//Ajout de la classe Math dans les éléments proposés par le WebService <br />
$server-&gt;setClass('Math'); <br />
&nbsp;<br />
//l'utilisation du WebService se fera toujours par la méthode POST <br />
if ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;) &nbsp;<br />
{ <br />
&nbsp; $server-&gt;handle(); <br />
} <br />
else //dans le cas contraire, la page affichera les méthodes proposées par le WebService <br />
{ <br />
&nbsp; echo '&lt;h4&gt;Ce serveur SOAP peut gérer les fonctions suivantes : &lt;/h4&gt;&lt;ul&gt;'; <br />
&nbsp; $functions = $server-&gt;getFunctions(); <br />
&nbsp; foreach($functions as $func) <br />
&nbsp; &nbsp; echo '&lt;li&gt;'.$func.'&lt;/li&gt;'; <br />
&nbsp; <br />
&nbsp; echo '&lt;/ul&gt;'; <br />
}</div></div>
<p>Vous avez sûrement remarqué qu’on fait appel au fichier WebService.wsdl alors qu’on ne l’a pas encore créé. On va donc s’en charger maintenant. Le mieux pour cela est d’utiliser un logiciel qui va générer le fichier wsdl finale grâce à des informations qu’on lui aura apporté. Pour ma part j’utilise Altova XML Spy qui est disponible gratuitement en version d’essai.<br />
Voilà donc ce que ça donne en version graphique :</p>
<p><img src="http://laedit.developpez.com/Storage/Articles/WSDL.jpg" alt="Résultat graphique du fichier WSDL" title="Résultat graphique du fichier WSDL" /></p>
<p>La partie serveur est à présent terminée, attaquons nous au client .net en C#.</p>
<p>L’utilisation de Visual Studio 2008 est conseillé, il permet la génération automatique d’un proxy grâce a WCF à partir du fichier WSDL.<br />
On va commencer par créer une application console. Ensuite, il suffit d’ajouter une un Service Reference en passant en adresse celle du fichier WSDL (http://localhost/WebServices/WebService.wsdl dans notre cas) et Math comme namespace pour la référence.</p>
<p>WCF a alors généré la classe MathServiceClient ainsi qu’un fichier de configuration qui vont nous servir à intéragir avec le WebService.<br />
On va instancier cette classe :</p>
<p><code class="codecolorer text default"><span class="text">MathServiceClient math = new MathServiceClient();</span></code></p>
<p>Puis on va simplement appeler nos deux méthodes :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Console.WriteLine(math.Add(5, 5)); <br />
Console.WriteLine(math.Substract(10, 5));</div></div>
<p>Et bien sûr, il ne faut pas oublier de fermer le client :</p>
<p><code class="codecolorer text default"><span class="text">math.Close();</span></code></p>
<p>Et voilà, notre client .net consomme notre WebService PHP !</p>
<p>Les sources de cet article sont disponibles <a href="http://laedit.developpez.com/Storage/Articles/WebService.rar">ici</a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interopérabilité PHP / C# via WebService</title>
		<link>https://blog.developpez.com/laedit/p7380/c/interoperabilite_php_c_via_webservice</link>
		<comments>https://blog.developpez.com/laedit/p7380/c/interoperabilite_php_c_via_webservice#comments</comments>
		<pubDate>Wed, 18 Mar 2009 20:51:52 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Divers]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WebService]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Interopérabilité est peut être un bien grand mot pour décrire ce qui va suivre. En effet, dès que l’on parle de WebService, il suffit d’avoir un fichier WSDL pour qu’on puisse consommer le WebService par une application d’un autre langage. Nous verrons donc dans un premier temps ce qu’est un fichier WSDL, puis la création d’un WebService en PHP consommé par une application .NET en C# et inversement. Qu’est-ce qu’un fichier WSDL ? Juste une [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Interopérabilité est peut être un bien grand mot pour décrire ce qui va suivre. En effet, dès que l’on parle de WebService, il suffit d’avoir un fichier WSDL pour qu’on puisse consommer le WebService par une application d’un autre langage. Nous verrons donc dans un premier temps ce qu’est un fichier WSDL, puis la création d’un WebService en PHP consommé par une application .NET en C# et inversement.</p>
<p><span id="more-12"></span></p>
<p>Qu’est-ce qu’un fichier WSDL ?</p>
<p>Juste une rapide présentation, pour plus d’information, vous pouvez aller voir ici (<a href="http://www.w3.org/TR/wsdl">http://www.w3.org/TR/wsdl</a>).<br />
Le fichier WSDL décrit une Interface publique d&rsquo;accès à un Service Web, notamment dans le cadre d&rsquo;architectures de type SOA (Service Oriented Architecture).<br />
C&rsquo;est une description fondée sur le XML qui indique « comment communiquer pour utiliser le service »;</p>
<p>Il décrit notamment le Protocole de communication (SOAP RPC ou SOAP orienté message), le format de messages requis pour communiquer avec le service, les méthodes que le client peut invoquer ainsi que la localisation du service.<br />
Le fichier WSDL est un fichier XML qui commence par la balise <code class="codecolorer text default"><span class="text">&lt;definitions&gt;</span></code> et qui contient les balises suivantes :<br />
-<code class="codecolorer text default"><span class="text">&lt;binding&gt;</span></code> : définit le protocole à utiliser pour invoquer le service web<br />
-<code class="codecolorer text default"><span class="text">&lt;port&gt;</span></code> : spécifie l&rsquo;emplacement actuel du service<br />
-<code class="codecolorer text default"><span class="text">&lt;service&gt;</span></code> : décrit un ensemble de points finaux du réseau</p>
<p>Les opérations possibles et messages sont décrits de façon abstraite mais cette description renvoie à des protocoles réseaux et formats de messages concrets.<br />
Il y a différents moyens de réaliser ce fichier, certaines seront décrites dans cet article, mais étant donné que c’est du XML, un simple bloc note suffit !</p>
<p><a href="http://blog.developpez.com/laedit/p7381/articles/i-webservice-php-consomme-par-une-applic/">Dans ce post, on verras un WebService PHP consommé par une application C#.</a><br />
<a href="http://blog.developpez.com/laedit/p8249/articles/webservice-c-en-wcf-consomme-par-une-app/#more8249"><br />
Et dans celui-là, un WebService C# en WCF consommé par une application PHP.</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebService C# en WCF consommé par une application PHP</title>
		<link>https://blog.developpez.com/laedit/p8249/c/webservice_c_en_wcf_consomme_par_une_app</link>
		<comments>https://blog.developpez.com/laedit/p8249/c/webservice_c_en_wcf_consomme_par_une_app#comments</comments>
		<pubDate>Tue, 27 Oct 2009 16:23:08 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Divers]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WebService]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Faisant suite après quelques mois à l&#8217;article sur le webservice PHP consommé par une application C#, nous verrons ici l&#8217;inverse. Je ne vais pas détailler WCF ici, nous allons juste voir la mise en place d’un service via une application console. Si vous souhaitez en savoir plus sur WCF, voilà l’excellent article de Julien Corioland. (http://blogs.dotnet-france.com/julienc/post/Introduction-a-Windows-Communication-Foundation.aspx) Nous garderons les mêmes méthodes que dans le post précédent, c&#8217;est-à-dire une addition et une soustraction d’entiers. Commençons donc [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Faisant suite après quelques mois à l&rsquo;article sur le <a href="http://blog.developpez.com/laedit/p7381/articles/i-webservice-php-consomme-par-une-applic/">webservice PHP consommé par une application C#</a>, nous verrons ici l&rsquo;inverse.</p>
<p><span id="more-15"></span></p>
<p>Je ne vais pas détailler WCF ici, nous allons juste voir la mise en place d’un service via une application console. Si vous souhaitez en savoir plus sur WCF, voilà l’excellent article de Julien Corioland. (<a href="http://blogs.dotnet-france.com/julienc/post/Introduction-a-Windows-Communication-Foundation.aspx">http://blogs.dotnet-france.com/julienc/post/Introduction-a-Windows-Communication-Foundation.aspx</a>)</p>
<p>Nous garderons les mêmes méthodes que dans le post précédent, c&rsquo;est-à-dire une addition et une soustraction d’entiers.</p>
<p>Commençons donc par définir l’interface du service :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[ServiceContract] <br />
public interface IService <br />
{ <br />
&nbsp; &nbsp; [OperationContract] <br />
&nbsp; &nbsp; public int Add(int a, int b); <br />
&nbsp; &nbsp; [OperationContract] <br />
&nbsp; &nbsp; public int Substract(int a, int b); <br />
}</div></div>
<p>L’attribut ServiceContract définit le contrat du service qui sera exposé. Il possède une propriété Namespace qui permet de changer le namespace du service (tempuri.org par défaut).<br />
L’attribut OperationContract définit les méthodes visibles du service.</p>
<p>Passons à l’implémentation du service :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class Math : IService <br />
{ <br />
&nbsp; &nbsp; #region IService Members <br />
&nbsp;<br />
&nbsp; &nbsp; public int Add(int a, int b) <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; return a + b; <br />
&nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; public int Substract(int a, int b) <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; return a - b; <br />
&nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; #endregion <br />
}</div></div>
<p>Jusque là, rien de bien compliqué, il suffit d’implémenter l’interface définie plus haut. Passons maintenant au serveur, qui exposera le service WCF.</p>
<p>L’application sera une application console des plus classique. La première chose à faire est de créer un fichier de configuration (App.config) qui va paramétrer le type, l’adresse et le protocole du service.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt; <br />
&lt;configuration&gt; <br />
&nbsp; &lt;system.serviceModel&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;services&gt; <br />
&nbsp; &lt;!—- le type du service &nbsp;--&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;service name=&quot;ServiceImplementation.Math&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;host&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;baseAddresses&gt; <br />
&nbsp; &nbsp; &lt;!—- l’adresse où le service sera accessible &nbsp;--&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;add baseAddress=&quot;http://localhost:1664/MathService&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/baseAddresses&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/host&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;!—- le protocole pour joindre le service &nbsp;--&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;endpoint address=&quot;&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; binding=&quot;basicHttpBinding&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; contract=&quot;ServiceContract.IMathService&quot; /&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/service&gt; <br />
&nbsp; &nbsp; &lt;/services&gt; <br />
&nbsp;<br />
&nbsp; &lt;/system.serviceModel&gt; <br />
&lt;/configuration&gt;</div></div>
<p>On créer ensuite un host en lui indiquant le type que l’on veut exposer en service :</p>
<p><code class="codecolorer text default"><span class="text">ServiceHost host = new ServiceHost(typeof(ServiceImplementation.Math));</span></code></p>
<p>Il suffit ensuite de mettre le service en écoute :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">host.Open(); <br />
&nbsp;<br />
Console.WriteLine(&quot;Le service Math est à l'écoute&quot;); <br />
&nbsp;<br />
Console.WriteLine(&quot;Appuyez sur une touche pour quitter&quot;); <br />
&nbsp;<br />
Console.ReadLine(); <br />
host.Close();</div></div>
<p>Le service est maintenant prêt.</p>
<p>Mais le fichier WSDL n’a pas été créé, ce qui manque cruellement pour pouvoir consommer le service avec une application PHP. Heureusement, WCF permet de le générer automatiquement. Pour cela, il suffit de modifier le fichier de configuration.</p>
<p>On va tout d’abord rajouter un comportement au service. Dans la balise System.ServiceModel, on rajoute ceci :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;behaviors&gt; <br />
&nbsp; &nbsp; &lt;serviceBehaviors&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;behavior name=&quot;MathServiceBehaviors&quot; &gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;serviceMetadata httpGetEnabled=&quot;true&quot; /&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/behavior&gt; <br />
&nbsp; &nbsp; &lt;/serviceBehaviors&gt; <br />
&lt;/behaviors&gt;</div></div>
<p>Il faut ensuite modifier la balise service comme suit :</p>
<p><service name="ServiceImplementation.Math" behaviorConfiguration="MathServiceBehaviors"></p>
<p>Et voilà, notre service peut maintenant être consommé par n’importe quelle application via son fichier WSDL.</p>
<p>Il ne reste plus qu’à faire le client PHP. Pour cela, le mieux est de générer le client SOAP à partir du fichier WSDL. Je me suis personnellement servi de wsdl2php, disponible ici : <a href="http://www.urdalen.no/wsdl2php/">http://www.urdalen.no/wsdl2php/</a>, mais d’autre scripts font ça très bien aussi, comme WSDLInterpreter : <a href="http://code.google.com/p/wsdl2php-interpreter/">http://code.google.com/p/wsdl2php-interpreter/</a>.</p>
<p>Une fois le WSDL passé à la moulinette, on obtient donc une jolie classe Math qui hérite de SoapClient et qui possèdent deux fonctions : Add et Substract. Sont également générées les classes qui vont servir à passer les paramètres et à récupérer les résultats : Add qui contient deux entiers, AddResponse qui possède une propriété AddResult qui est le résultat de l’addition, Substract qui contient également deux entiers et SubsctractResponse qui possède une propriété SubstractResult qui est le résultat de la soustraction.</p>
<p>Maintenant qu’on a de quoi consommer le service WCF, il ne reste plus qu’à faire le client PHP. On va tout d’abord créer le fichier client.php. Première chose à ajouter, un include sur le fichier généré par wsdl2php : Math.php.</p>
<p>Ensuite, on va instancier le client du service Math :</p>
<p><code class="codecolorer text default"><span class="text">$client = new Math();</span></code></p>
<p>Il faut maintenant créer les paramètres pour la fonction Add :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$addParameters = new Add(); <br />
$addParameters-&gt;a = 2; <br />
$addParameters-&gt;b = 2;</div></div>
<p>Vous remarquerez que a et b correspondent aux noms des paramètres de la fonction Add définis par le contrat du service.<br />
On appelle la fonction Add :</p>
<p><code class="codecolorer text default"><span class="text">$result = $client-&gt;Add($addParameters);</span></code></p>
<p>On peut ensuite utiliser la propriété AddResult de $result pour récupérer le résultat de l’addition et l’afficher par exemple :</p>
<p><code class="codecolorer text default"><span class="text">echo $result-&gt;AddResult;</span></code></p>
<p>Et c’est fini, nous avons maintenant un client PHP qui consomme notre service WCF !</p>
<p>Les sources de cet article sont disponibles <a href="http://laedit.developpez.com/Storage/Articles/WebServiceWCF_PHP.zip">ici</a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
