<?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; Divers</title>
	<atom:link href="https://blog.developpez.com/laedit/pcategory/divers/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>Convertir des fichiers XPS en PDF</title>
		<link>https://blog.developpez.com/laedit/p8983/news/convertir_des_fichiers_xps_en_pdf</link>
		<comments>https://blog.developpez.com/laedit/p8983/news/convertir_des_fichiers_xps_en_pdf#comments</comments>
		<pubDate>Tue, 08 Jun 2010 15:20:24 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Pour une fois, ce post ne parlera pas de développement. Enfin si, mais indirectement. Vous êtes-vous déjà retrouvé à devoir convertir des fichiers XPS en PDF ? Vous avez probablement utilisé une imprimante PDF telle que PDFCreator ou CuteWriter. Et cela à fonctionné. Mais si vous utilisez Reflector et son addin SequenceViz afin d&#8217;exporter rapidement vos diagrammes de séquences, les fichiers XPS générés donnent une page blanche (ou presque) une fois imprimé en PDF. Après [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Pour une fois, ce post ne parlera pas de développement. Enfin si, mais indirectement.</p>
<p>Vous êtes-vous déjà retrouvé à devoir convertir des fichiers XPS en PDF ?<br />
Vous avez probablement utilisé une imprimante PDF telle que PDFCreator ou CuteWriter. Et cela à fonctionné.</p>
<p>Mais si vous utilisez Reflector et son addin SequenceViz afin d&rsquo;exporter rapidement vos diagrammes de séquences, les fichiers XPS générés donnent une page blanche (ou presque) une fois imprimé en PDF.</p>
<p><span id="more-20"></span></p>
<p>Après quelques heures de recherches sur le net et de tests de diverses méthodes (sites web de conversion, programmes divers, imprimantes PDF) donnant des résultats pas toujours probant, j&rsquo;ai fini par mettre la main sur un site qui allie la qualité à la rapidité.</p>
<p>Il suffit d&rsquo;indiquer le fichier à convertir ainsi que son adresse mail afin de pouvoir récupérer le document converti, et en moins de deux minutes le résultat est là.</p>
<p>Voilà l&rsquo;adresse du site : <a href="http://pdf.tchwork.com/fr/">http://pdf.tchwork.com/fr/</a></p>
<p>Petit plus, le site gère aussi la conversion des formats suivants en PDF : .doc, .docx, .rtf, .xls, .ppt, .ps, .eps, .pdf, .dwg, .dwf, .dst, .xps, .odt, .sxw, .sdw, .jtd, .hwp, .wps, .ods, .sxc, .sdc, .dif, .dbf, .slk, .csv, .wk1, .123, .pxl, .wb2, .odp, .sxi, .sda, .sdd, .sdp, .cgm, .odg, .sxd, .dxf</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twoolr : toutes les statistiques sur votre compte twitter</title>
		<link>https://blog.developpez.com/laedit/p8881/news/twoolr_toutes_les_statistiques_sur_votre</link>
		<comments>https://blog.developpez.com/laedit/p8881/news/twoolr_toutes_les_statistiques_sur_votre#comments</comments>
		<pubDate>Wed, 28 Apr 2010 06:58:03 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Des statistiques d&#8217;utilisation aussi bien que des statistiques de réseau, en passant par quel heure/jour/semaine/mois vous êtes le plus actif, quels clients vous utilisez, les liens que vous avez envoyés, qui vous réponds le plus, etc&#8230; Même si toutes ne sont pas forcément utiles (en tout cas pour des particuliers), ça s&#8217;avère tout de même intéressant à essayer. Twoolr est actuellement en phase beta et nécessite un token, par chance 10 sont disponibles en passant [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Des statistiques d&rsquo;utilisation aussi bien que des statistiques de réseau, en passant par quel heure/jour/semaine/mois vous êtes le plus actif, quels clients vous utilisez, les liens que vous avez envoyés, qui vous réponds le plus, etc&#8230;</p>
<p>Même si toutes ne sont pas forcément utiles (en tout cas pour des particuliers), ça s&rsquo;avère tout de même intéressant à essayer.</p>
<p>Twoolr est actuellement en phase beta et nécessite un token, par chance 10 sont disponibles en passant par l&rsquo;url suivante : http://laedit.twoolr.com</p>
<p>Bonne twittistiques ! <img src="https://blog.developpez.com/laedit/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Header Designer</title>
		<link>https://blog.developpez.com/laedit/p8037/c/code_header_designer</link>
		<comments>https://blog.developpez.com/laedit/p8037/c/code_header_designer#comments</comments>
		<pubDate>Mon, 07 Sep 2009 18:15:13 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai découvert ce week end une application assez sympathique. Elle n&#8217;a qu&#8217;un seul but mais le fait bien, elle permet de définir un header et un footer à rajouter/remplacer à des fichiers de codes. Certes, ce n&#8217;est pas une chose que l&#8217;on fait souvent, mais quand on prend l&#8217;habitude de partager son code, c&#8217;est toujours bien de laisser une trace. Et même pour soi, garder certaines informations en entête peut être utile. Présentation En premier [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai découvert ce week end une application assez sympathique. Elle n&rsquo;a qu&rsquo;un seul but mais le fait bien, elle permet de définir un header et un footer à rajouter/remplacer à des fichiers de codes.</p>
<p>Certes, ce n&rsquo;est pas une chose que l&rsquo;on fait souvent, mais quand on prend l&rsquo;habitude de partager son code, c&rsquo;est toujours bien de laisser une trace. Et même pour soi, garder certaines informations en entête peut être utile.</p>
<p><span id="more-14"></span></p>
<p><strong>Présentation</strong></p>
<p>En premier lieu, l&rsquo;utilisateur va définir un header via un template, comme celui-ci par exemple :</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">/* &nbsp;---------------------------------------------------------------------------- <br />
&nbsp;* &nbsp;[COMPANY NAME] <br />
&nbsp;* &nbsp;---------------------------------------------------------------------------- <br />
&nbsp;* &nbsp;[PRODUCT NAME] <br />
&nbsp;* &nbsp;---------------------------------------------------------------------------- <br />
&nbsp;* &nbsp;File: &nbsp; &nbsp; &nbsp; [AUTO:FILE] <br />
&nbsp;* &nbsp;Author: &nbsp; &nbsp; [AUTO:AUTHOR] <br />
&nbsp;* &nbsp;---------------------------------------------------------------------------- <br />
&nbsp;*/</div></div>
<p>Entre crochet, ce sont des champs remplaçables. On définira donc par la suite leur valeur.<br />
Les champs commençant par &lsquo;AUTO:&rsquo; sont des champs automatiques : ils seront automatiquement remplacés par le programme, sans que l&rsquo;utilisateur ai besoin de définir une valeur de remplacement.</p>
<p>De base, on dispose de deux champs auto :<br />
 &#8211; File qui va être remplacé par le nom du fichier<br />
 &#8211; Author qui va être remplacé par le nom d&rsquo;utilisateur windows</p>
<p>Ensuite, on va donc définir les champs à remplacer via un DataGridView :<br />
<img src="http://blog.developpez.com/media/DataGridViewReplaceFields.jpg" width="677" height="213" alt="DataGridView ReplaceFields" /></p>
<p>Il faut maintenant sélectionner les fichiers auxquels on veut appliquer le header. Pour cela, en haut de la fenêtre on va aller cliquer sur le bouton &lsquo;Source Directory&rsquo; pour choisir un dossier. Généralement, ce sera un dossier d&rsquo;une solution ou d&rsquo;un projet. Une fois cela fait, on va sélectionner les fichiers via le bouton &lsquo;Select files&rsquo;. Là, on va pouvoir choisir un pattern de recherche des fichiers, qui par défaut recherche les fichier .cs. La liste des sous-dossiers va apparaître dans un TreeView à gauche tandis que les fichiers contenus dans le dossier sélectionné seront listés à droite. Il suffit de cocher un fichier pour l&rsquo;inclure dans les fichiers auxquels le header sera appliqué. A noter, une option très pratique dans le menu : &lsquo;Select all&rsquo;, &lsquo;Unselect all&rsquo;.</p>
<p>Et voilà, on peut maintenant appliquer le header aux fichiers en cliquant sur le bouton &lsquo;Go&rsquo; en bas à gauche de l&rsquo;application. Une fenêtre de log est même présente afin de savoir si le header à pu être appliqué ou non et dans le dernier cas, de savoir pourquoi.</p>
<p>L&rsquo;application propose aussi une gestion de sauvegarde et d&rsquo;ouverture de fichier .headerx, comprenant le template et la liste de correspondances des champs avec leur valeur de remplacement.</p>
<p>Téléchargement : <a href="http://code.msdn.microsoft.com/HeaderDesigner">http://code.msdn.microsoft.com/HeaderDesigner</a></p>
<p><strong>Ajouts</strong></p>
<p>Etant un peu trop limité pour mon utilisation personnelle, j&rsquo;y ai donc rajouté quelques petites choses.</p>
<p>Champs automatiques :<br />
 &#8211; Modification_Date : date de dernière modification du fichier.<br />
 &#8211; Creation_Date : date de création du fichier.<br />
 &#8211; Solution : nom de la solution si il y en a une.<br />
 &#8211; Project : nom du projet.<br />
 &#8211; Namespace : nom du namespace.<br />
 &#8211; Inherit : nom de la classe mère si il y en a une.<br />
 &#8211; Implements : nom des interfaces implémenté si il y en a.</p>
<p>Une petite aide à la saisie à aussi été intégrée dans l&rsquo;éditeur de template, pour ne pas devoir avoir la documentation sous les yeux pour ajouter un champ automatique.<br />
<img src="http://blog.developpez.com/media/AutoCompleteListBox.jpg" width="341" height="189" alt="AutoComplete ListBox" /></p>
<p>Le dossier source et les fichiers sélectionnés sont enregistrés dans le fichier .headerx, et sont donc reconnus lors de l&rsquo;ouverture du fichier.</p>
<p>L&rsquo;extension .headerx est associé à l&rsquo;application, il suffit donc d&rsquo;un double-clic sur un fichier .headerx pour l&rsquo;ouvrir avec le Code Header Designer.</p>
<p>Téléchargement :<br />
 &#8211; <a href="http://laedit.developpez.com/Storage/Applications/CodeHeaderDesigner/Code Header Designer.zip">installeur</a><br />
 &#8211; <a href="http://laedit.developpez.com/Storage/Applications/CodeHeaderDesigner/Code Header Designer - Source.zip">sources</a></p>
<p><strong>Lien</strong></p>
<p>Blog du créateur du Code Header Designer : <a href="http://colbyafrica.blogspot.com/">http://colbyafrica.blogspot.com/</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
		<item>
		<title>Détecter et éviter les fuites de mémoire et de ressources dans les applications .NET chez dotnetguru</title>
		<link>https://blog.developpez.com/laedit/p8211/news/detecter_et_eviter_les_fuites_de_memoire</link>
		<comments>https://blog.developpez.com/laedit/p8211/news/detecter_et_eviter_les_fuites_de_memoire#comments</comments>
		<pubDate>Tue, 20 Oct 2009 05:50:31 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[DotnetGuru a publié un excellent article de Fabrice Marguerie (auteur de Linq in action) sur la détection des fuites de mémoires dans les applications dotnet : Bonne lecture !]]></description>
				<content:encoded><![CDATA[<p>DotnetGuru a publié un excellent article de Fabrice Marguerie (auteur de Linq in action) sur la détection  des fuites de mémoires dans les applications dotnet : <a href="http://www.dotnetguru.org/articles/leak/Leaks.fr.html"></p>
<p>Bonne lecture ! <img src="https://blog.developpez.com/laedit/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Header Designer : new release</title>
		<link>https://blog.developpez.com/laedit/p8071/c/code_header_designer_new_release</link>
		<comments>https://blog.developpez.com/laedit/p8071/c/code_header_designer_new_release#comments</comments>
		<pubDate>Thu, 17 Sep 2009 07:50:57 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Divers]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Travaillant maintenant activement sur ce projet (dont je vous ai déjà parlé ici) suite à l&#8217;invitation de Colby Africa, je viens de pondre une nouvelle release. Au menu, quelques ajouts : &#8211; un autofield SUMMARY, qui insère dans le header le résumé de la class/enum/struct/interface contenu dans le fichier source &#8211; un template spécial StyleCop &#8211; la possibilité d&#8217;insérer des licences dans le header et de pouvoir rajouter les siennes à l&#8217;application afin de les [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Travaillant maintenant activement sur ce projet (dont je vous ai déjà parlé <a href="http://blog.developpez.com/laedit/p8037/articles/code-header-designer/">ici</a>) suite à l&rsquo;invitation de <a href="http://colbyafrica.blogspot.com/">Colby Africa</a>, je viens de pondre une nouvelle release.</p>
<p><span id="more-7"></span></p>
<p>Au menu, quelques ajouts :</p>
<p> &#8211; un autofield SUMMARY, qui insère dans le header le résumé de la class/enum/struct/interface contenu dans le fichier source<br />
 &#8211; un template spécial StyleCop<br />
 &#8211; la possibilité d&rsquo;insérer des licences dans le header et de pouvoir rajouter les siennes à l&rsquo;application afin de les retrouver plus facilement<br />
 &#8211; des boutons dans la toolbar du header editor : base template, stylecop template, insert autofield, insert license<br />
 &#8211; des raccourcis clavier pour les boutons cités au-dessus<br />
 &#8211; la possibilité de sauvegarder le répertoire source et les fichiers sources sélectionnées dans un fichier .headerx</p>
<p>Et bien sûr des corrections de bugs :</p>
<p> &#8211; les lignes vides dans le code ne sont plus supprimées<br />
 &#8211; la ligne vide n&rsquo;est plus ajoutée entre le header et le code à chaque application du header<br />
 &#8211; le contenu des champs non auto est conservé lors de la modification du header<br />
 &#8211; si un fichier source listé dans un fichier .headerx est supprimé cela ne fera plus planter l&rsquo;application lors de l&rsquo;application du header</p>
<p>Vous pouvez donc trouver la nouvelle release ici : <a href="http://code.msdn.microsoft.com/HeaderDesigner">http://code.msdn.microsoft.com/HeaderDesigner</a></p>
<p>Je pense en faire un addin pour Visual Studio, qu&rsquo;en pensez-vous ?</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lancement de Dotnet-France</title>
		<link>https://blog.developpez.com/laedit/p6917/news/lancement_de_dotnet_france</link>
		<comments>https://blog.developpez.com/laedit/p6917/news/lancement_de_dotnet_france#comments</comments>
		<pubDate>Wed, 10 Dec 2008 17:15:08 +0000</pubDate>
		<dc:creator><![CDATA[laedit]]></dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dotnet-france est un site vous permettant dès à présent de préparer gratuitement vos certifications Microsoft pour le monde du développement par le biais de cours et de tests. Les technologies abordées vont de Framework .NET 2.0 au 3.5, en passant par XNA, WPF, SharePoint et même Mono ! Pensez-y, c&#8217;est toujours bien de justifier de ces compétences par une certification officielle. Je souhaite une bonne chance et une bonne continuation à Julien Dollon et toute [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.dotnet-france.com/">Dotnet-france</a> est un site vous permettant dès à présent de préparer gratuitement vos certifications Microsoft pour le monde du développement par le biais de cours et de tests.</p>
<p>Les technologies abordées vont de Framework .NET 2.0 au 3.5, en passant par XNA, WPF, SharePoint et même Mono !</p>
<p>Pensez-y, c&rsquo;est toujours bien de justifier de ces compétences par une certification officielle.</p>
<p>Je souhaite une bonne chance et une bonne continuation à Julien Dollon et toute son équipe !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
