<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The World is mine &#187; WCF</title>
	<atom:link href="http://grozeille.com/tag/wcf/feed/" rel="self" type="application/rss+xml" />
	<link>http://grozeille.com</link>
	<description>Just another Wordpress.com weblog</description>
	<lastBuildDate>Sat, 07 Jan 2012 12:00:31 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='grozeille.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The World is mine &#187; WCF</title>
		<link>http://grozeille.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://grozeille.com/osd.xml" title="The World is mine" />
	<atom:link rel='hub' href='http://grozeille.com/?pushpress=hub'/>
		<item>
		<title>Episode 8: Mathias découvre COM</title>
		<link>http://grozeille.com/2011/04/19/episode-8-mathias-decouvre-com/</link>
		<comments>http://grozeille.com/2011/04/19/episode-8-mathias-decouvre-com/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 06:00:18 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[DotNetServer]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[com]]></category>
		<category><![CDATA[corba]]></category>
		<category><![CDATA[DBus]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=514</guid>
		<description><![CDATA[Bonjour tout le monde, et merci de votre patience&#8230; Ça fait presque 5 mois que je n&#8217;ai pas blogué, et que j&#8217;ai interrompu ma série &#8220;Mathias découvre&#8230;&#8221; Comme j&#8217;en découvre tous les jours, j&#8217;ajouterai bien d&#8217;autres épisodes avant la conclusion finale, mais j&#8217;ai peur que ça dure une éternité En réalité, je voulais &#8220;jouer la [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=514&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bonjour tout le monde, et merci de votre patience&#8230;<br />
Ça fait presque 5 mois que je n&#8217;ai pas blogué, et que j&#8217;ai interrompu ma série &#8220;Mathias découvre&#8230;&#8221;<br />
Comme j&#8217;en découvre tous les jours, j&#8217;ajouterai bien d&#8217;autres épisodes avant la conclusion finale, mais j&#8217;ai peur que ça dure une éternité <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
En réalité, je voulais &#8220;jouer la montre&#8221; avec ces blogs, afin de stabiliser mon projet et lui trouver un nom sympathique. Mais je n&#8217;ai pas vraiment trouvé le temps d&#8217;y travailler, alors je vais &#8220;pousser l’oisillon hors du nid&#8221;, et j&#8217;ajusterai plus tard s&#8217;il ne vole pas très bien ;D</p>
<p>Je change de sujet par rapport aux précédents postes, et je m&#8217;attaque à un autre sujet épineux: la communication inter-processus.</p>
<p>Au début de ma vie professionnel, je n’ai pas commencé à travailler en .Net, mais en Delphi.</p>
<p>J’avoue que Delphi était séduisant. Avant .Net, c’était la manière la plus efficace de réaliser des applications Windows lourde avec un Designer d’interface unique. Et puis, n’oublions pas que l’inventeur du langage Delphi n’est autre que <a href="http://en.wikipedia.org/wiki/Anders_Hejlsberg">Anders Hejlsberg</a>, qui fut embauché par Microsoft pour inventer C# !</p>
<p>Quand .Net prenait de plus en plus d’ampleur,  j’ai alors réussi à convaincre tout le monde de s&#8217;y mettre.<br />
Mais comme la migration devait se faire petit à petit, il fallait intégrer Delphi avec .Net.</p>
<p>Pour cela, j’ai découvert <a href="http://en.wikipedia.org/wiki/Component_Object_Model">COM</a>.<br />
COM est une technologie 100% Microsoft, mais qui se base sur les mêmes principes que Corba.<br />
COM permet de communiquer entre les applications, peu importe le langage. La communication se faisait en activant des services, à l’aide d’un contrat qui se rédigeait dans un langage indépendant du langage de compilation : IDL (Interface Definition Language).</p>
<p><a href="http://grozeille.files.wordpress.com/2010/11/0764549146fg08_16.jpg"><img class="aligncenter size-medium wp-image-515" title="0764549146fg08_16" src="http://grozeille.files.wordpress.com/2010/11/0764549146fg08_16.jpg?w=300&#038;h=194" alt="" width="300" height="194" /></a></p>
<p>C’était magique : on pouvait inclure un UserControl .Net dans une application Delphi existante ! On pouvait aussi appeler des services .Net depuis Delphi, et vis vers ça !</p>
<p>Les services étaient d’ailleurs enregistrés auprès de Windows, dans la base de registre. Donc, quand un programme Delphi demande un service qui répond à une interface, Windows se charge de le localiser (DLL ou EXE) de l’héberger dans un conteneur (dans le cas de l’EXE, il lance ce dernier, dans le cas de la DLL, il l’host dans DLLHOST.exe) et d’instancier le service pour qu’il puisse être utilisé.</p>
<p>Et ce n’est pas tout ! Il y avait aussi DCOM qui est la version distribué de COM. Cela veut dire que si la DLL n’est pas sur la machine actuelle, Windows se charge d’interroger les autres serveurs DCOM pour qu’ils instancient le service à distance ! Tout cela avec une couche de sécurité ultra complexe !</p>
<p>De plus, le langage IDL supporte les méthodes, les propriétés, les événements, les paramètres de type « out », l’héritage d’interfaces, la gestion des versions, etc.…</p>
<p>Si vous souhaiter exposer des services sous Windows, cette technologie semble la plus appropriée.</p>
<p>Dans le monde des serveurs J2EE, ce fût Corba, concurrent direct à COM, qui remplissait ce rôle.</p>
<p>Mais voila : COM est 100% Windows, 100% Natif (non managé) ce qui rend le pont COM-.Net peu performant.</p>
<p>Concernant CORBA, il existe bien des connecteurs pour .Net, mais pas de serveur CORBA 100% managé.<br />
De plus, CORBA est abandonné dans certains domaines à cause de sa lourdeur : les distributions Linux ont migré de CORBA à DBUS pour avoir aussi leur « équivalent à COM ». A noter que DBus existent en 100% .Net: <a href="http://www.ndesk.org/DBusSharp">http://www.ndesk.org/DBusSharp</a></p>
<p>Microsoft abandonne d’ailleurs COM pour sa technologie de communication phare : WCF.<br />
Avant WCF, Microsoft avait introduit une autre solution 100% .Net: .Net Remoting. Mais ce dernier était trop simple et a fini par être abandonné, même si c&#8217;est toujours la technologie par défaut pour communiquer inter-AppDomain.</p>
<p>Alors, que choisir comme technologie de communication et d’activation de service ? Point à Point ou par un intermédiaire (Bus/Broker)? Quel format de message/marshalling doit-on utiliser?</p>
<p>Pour ma part: COM n&#8217;est pas multi-plateforme, je ne suis pas convaincu par l&#8217;usine à gaz WCF, DBusSharp est trop bugué, .Net remoting est trop simple/limité&#8230; je reste un sur ma fin.</p>
<p>Mais entre temps, j&#8217;ai découvert le &#8220;Messaging&#8221; et la communication asynchrone, qui est parfaite pour un environnement distribué. On ne peut pas remplacer le RPC par le Messaging dans tous les cas, mais il a falloir que j&#8217;exploite cette voie.</p>
<br /> Tagged: <a href='http://grozeille.com/tag/net/'>.Net</a>, <a href='http://grozeille.com/tag/com/'>com</a>, <a href='http://grozeille.com/tag/corba/'>corba</a>, <a href='http://grozeille.com/tag/dbus/'>DBus</a>, <a href='http://grozeille.com/tag/wcf/'>WCF</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/514/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=514&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2011/04/19/episode-8-mathias-decouvre-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/11/0764549146fg08_16.jpg?w=300" medium="image">
			<media:title type="html">0764549146fg08_16</media:title>
		</media:content>
	</item>
		<item>
		<title>Timeout WCF au bout d&#8217;un certain nombre d&#8217;appels</title>
		<link>http://grozeille.com/2008/04/30/timeout-wcf-au-bout-dun-certain-nombre-dappels/</link>
		<comments>http://grozeille.com/2008/04/30/timeout-wcf-au-bout-dun-certain-nombre-dappels/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 23:20:52 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Asp.net]]></category>
		<category><![CDATA[Spring.net]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=50</guid>
		<description><![CDATA[Rien de plus stressant que de passer une journée entière sur un bug. Surtout si on n&#8217;a aucune idée du problème (pas d&#8217;exceptions, ni d&#8217;erreurs dans les logs) et que les recherches sur Internet sont infructueuses. Contexte : une application Web Asp.Net communique avec un service WCF. Problème : au bout d’un certain nombre d’appels [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=50&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Rien de plus stressant que de passer une journée entière sur un bug. Surtout si on n&#8217;a aucune idée du problème (pas d&#8217;exceptions, ni d&#8217;erreurs dans les logs) et que les recherches sur Internet sont infructueuses.<br />
<strong>Contexte</strong> : une application Web Asp.Net communique avec un service WCF.<br />
<strong>Problème</strong> : au bout d’un certain nombre d’appels (invariant) l’application Web n’arrive plus à joindre le serveur (Timeout).</p>
<p><span id="more-50"></span>Pour conserver une trace de mon incompétence, voici donc la <strong>solution</strong>:<br />
Pour qu&#8217;on puisse dialoguer avec un service WCF dans une page Asp.net, je leur injecte un proxy à l’aide de Spring (voir <a href="http://www.springframework.net/doc-latest/reference/html/web.html#web-di">Spring.net pour le web</a>). Pour cela, j’utilise une &#8220;factory de proxy&#8221; à l’aide de l’interface <a href="http://www.springframework.net/doc-latest/reference/html/objects.html#d0e4032">IFactoryObject</a>.<br />
Crédule que j’étais, j’imaginais que le fait de retourner <code>true</code> pour la propriété <code>IsSingleton</code> allait faire en sorte que Spring.net ne fasse appel qu’une seule fois à la méthode <code>GetObject()</code>.<br />
Et bien non ! C&#8217;est à vous d’être cohérent: même si <code>IsSingleton</code> retourne <code>true</code>,  rien ne vous empêche de toujours retourner une instance différente dans la méthode <code>GetObject()</code>.</p>
<p>Pour en revenir à mon problème, vous l’aurez compris : ma méthode <code>GetObject()</code> retournait à chaque fois un nouveau proxy vers le service WCF.<br />
<strong>Résulat</strong> : à chaque fois que Spring avait besoin d’injecter mon proxy à une page (postback par exemple), je créai une nouvelle connexion au serveur WCF. J&#8217;ai fini par atteindre le nombre de connexion max, et le serveur ne répondait plus.</p>
<p>Il est tout de même dommage que les <a href="http://msdn.microsoft.com/en-us/library/ms732023.aspx">traces WCF</a> ne m&#8217;ont pas révélé d&#8217;exception expliquant cette limite max de connexion <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Pour approfondir le sujet sur les <code>IFactoryObject</code> :<br />
Un objet qui implémente <code>IFactoryObject</code> doit toujours être un singleton, si ce n’est pas le cas on obtient une exception:<br />
<pre class="brush: xml;">
&lt;object id=&quot;maFactory&quot; type=&quot;MonAssembly.MaFactory, MonAssembly&quot; singleton=&quot;false&quot;/&gt;
</pre><br />
<code><br />
=&gt; IFactoryObject must be defined as a singleton - IFactoryObjects themselves are not allowed to be prototypes.<br />
</code></p>
<p>La propriété <code>IsSingleton</code> de la factory indique seulement ce qu’elle est censée faire&#8230; mais sans aucune obligation/vérification du comportement. Dans mon cas, je retournais <code>true</code> mais rien ne m&#8217;a empêché de créer une nouvelle instance à chaque appel&#8230;</p>
<p>Dans le cas particulier d&#8217;une application Asp.net, on peut avoir des &#8220;presque singleton&#8221; en changeant le <code>scope</code>:<br />
<pre class="brush: xml;">
&lt;object id=&quot;maFactory&quot; type=&quot;MonAssembly.MaFactory, MonAssembly&quot; scope=&quot;application&quot;/&gt;
</pre></p>
<ul>
<li>scope=&#8221;application&#8221; : c&#8217;est un singleton de toute l&#8217;application web. Firefox et Safari m&#8217;affiche toujours 1.</li>
<li>scope=&#8221;session&#8221; : c&#8217;est un singleton pour chaque session cliente. Firefox et Safari m&#8217;affiche toujours 2 (1 instance pour Firefox +  1 instance pour Safari).</li>
<li>scope=&#8221;request&#8221; : c&#8217;est un singleton dans le cadre de la requête. Firefox et Safari vois le compteur s&#8217;incrémenter à chaque rafraichissement de la page.</li>
</ul>
<p>Pour <a href="http://www.springframework.net/doc-latest/reference/html/objects.html#d0e2577">plus d&#8217;infos sur les scopes</a>.</p>
<p><strong>Conclusion(s)</strong> :</p>
<ol>
<li>Ce n&#8217;est pas la propriété <code>IsSingleton</code> qui détermine si Spring va faire appelle une ou plusieurs fois à votre Factory. C&#8217;est à elle de fournir le comportement adéquat.</li>
<li>Un singleton n&#8217;en est pas toujours un&#8230; ça dépend du contexte. Dans tous les cas, pour éviter les erreurs comme la mienne, n&#8217;oublier pas d&#8217;utiliser la <code>destroyMethod</code> pour libérer les ressources. (l&#8217;interface <code>ILifeCycle</code> de Java <a href="http://jira.springframework.org/browse/SPRNET-753">n&#8217;existe pas encore</a> dans Spring.net  mais la <a href="http://www.springframework.net/roadmap.html">1.2 sort en RC1 début mai</a>&#8230;).</li>
<li>Un &#8220;Timeout&#8221; peut vouloir dire &#8220;trop de connexion au serveur&#8221; <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Cette fameuse Factory de proxy WCF sera fournie dans Spring.net 1.2. j&#8217;aurais perdu moins de temps en <a href="http://forum.springframework.net/showthread.php?t=2936">prenant les sources des nightbuilds</a>&#8230; vive l&#8217;OpenSource!</li>
</ol>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/grozeille.wordpress.com/50/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/grozeille.wordpress.com/50/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=50&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2008/04/30/timeout-wcf-au-bout-dun-certain-nombre-dappels/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>
	</item>
	</channel>
</rss>
