<?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 Vincent Lainé (dev01, phenixdotnet) &#187; Général</title>
	<atom:link href="https://blog.developpez.com/phenixdotnet/pcategory/general/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/phenixdotnet</link>
	<description></description>
	<lastBuildDate>Thu, 19 Jul 2012 20:57:39 +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>[MVC 3] Utiliser une vue définie dans une autre zone que la zone courante</title>
		<link>https://blog.developpez.com/phenixdotnet/p10800/net/mvc_3_utiliser_une_vue_definie_dans_une</link>
		<comments>https://blog.developpez.com/phenixdotnet/p10800/net/mvc_3_utiliser_une_vue_definie_dans_une#comments</comments>
		<pubDate>Mon, 12 Mar 2012 07:00:00 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Si vous utilisez les zones (et vous devriez ) il vous est surement arrivé de vouloir faire référence au layout par défaut depuis une vue définie dans votre zone. Prenons par exemple l&#8217;organisation suivante et le cas ou la vue &#171;&#160;Index&#160;&#187; de la zone &#171;&#160;MyArea&#160;&#187; fait référence au layout &#171;&#160;_Layout&#160;&#187; par défaut : Cela fonctionne très bien tant qu&#8217;il n&#8217;y a pas d'&#160;&#187;Action&#160;&#187; de défini dans le layout de base. Ajoutons une instruction d&#8217;inclusion de [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Si vous utilisez les zones (et vous devriez <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Clignement d&#39;?il" src="http://blog.developpez.com/media/117/wlEmoticon-winkingsmile.png" /> ) il vous est surement arrivé de vouloir faire référence au layout par défaut depuis une vue définie dans votre zone.</p>
<p><span id="more-68"></span></p>
<p>Prenons par exemple l&rsquo;organisation suivante et le cas ou la vue &laquo;&nbsp;Index&nbsp;&raquo; de la zone &laquo;&nbsp;MyArea&nbsp;&raquo; fait référence au layout &laquo;&nbsp;_Layout&nbsp;&raquo; par défaut :</p>
<p><a href="http://blog.developpez.com/media/117/MVC_Area_Orga.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="MVC_Area_Orga" border="0" alt="MVC_Area_Orga" src="http://blog.developpez.com/media/117/MVC_Area_Orga_thumb.png" width="211" height="516" /></a></p>
<p>Cela fonctionne très bien tant qu&rsquo;il n&rsquo;y a pas d'&nbsp;&raquo;Action&nbsp;&raquo; de défini dans le layout de base. </p>
<p>Ajoutons une instruction d&rsquo;inclusion de la vue partielle &laquo;&nbsp;_LogOnStatus&nbsp;&raquo; comme ceci :</p>
<p>@Html.Action(&laquo;&nbsp;LogOnStatus&nbsp;&raquo;, &laquo;&nbsp;Accounts&nbsp;&raquo;)</p>
<p>La page d&rsquo;accueil fonctionne toujours correctement et la vue partielle est bien affichée. Naviguons maintenant vers notre zone et patatra ! Le moteur MVC nous renvoi l&rsquo;erreur suivante lors de l&rsquo;accès à une page de votre zone (Par exemple lors de l&rsquo;accès à l&rsquo;url /MyArea/Test) :</p>
<p><a href="http://blog.developpez.com/media/117/MVC_Area_Exception.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="MVC_Area_Exception" border="0" alt="MVC_Area_Exception" src="http://blog.developpez.com/media/117/MVC_Area_Exception_thumb.png" width="612" height="369" /></a></p>
<p>Le message d&rsquo;erreur semble parlant mais &#8230; il n&rsquo;est pas correct <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Triste" src="http://blog.developpez.com/media/117/wlEmoticon-sadsmile.png" />. Le problème ne vient pas du contrôleur de la vue mais de l&rsquo;action du layout qui tente de trouver un contrôleur &laquo;&nbsp;AccountsController&nbsp;&raquo; qui possède une action &laquo;&nbsp;LogOnStatus&nbsp;&raquo; dans la zone en cours. En effet par défaut lorsqu&rsquo;un contrôleur est recherché, la zone en cours est prise comme contexte.</p>
<p>Pour remédier à ce problème il suffit d&rsquo;utiliser, dans le layout de base, la surcharge de Html.Action qui permet de spécifier la zone et de lui passer une nom de zone vide afin de cibler la &laquo;&nbsp;zone par défaut&nbsp;&raquo; :</p>
<p>Exemple :</p>
<p>@Html.Action(&laquo;&nbsp;LogOnStatus&nbsp;&raquo;, &laquo;&nbsp;Accounts&nbsp;&raquo;, new { area = &laquo;&nbsp;&nbsp;&raquo; })</p>
<p> </p>
<p> </p>
<p>C&rsquo;est tout bête mais encore faut-il le savoir <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Clignement d&#39;?il" src="http://blog.developpez.com/media/117/wlEmoticon-winkingsmile.png" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[FUN] Visual studio Achievements</title>
		<link>https://blog.developpez.com/phenixdotnet/p10533/net/fun_visual_studio_achievements</link>
		<comments>https://blog.developpez.com/phenixdotnet/p10533/net/fun_visual_studio_achievements#comments</comments>
		<pubDate>Thu, 24 Nov 2011 10:28:15 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Un nouvel addin pour Visual Studio va bientôt être mis à disposition par l&#8217;équipe de Channel 9. Son but ? Fournir une liste de succès qui seront débloqués en fonction du code que vous écrivez ! Totalement indispensable pour pouvoir se la raconter à la pause café ^^? &#171;&#160;Quoi ? tu n&#8217;as pas encore débloquer le succès &#171;&#160;Ecrire une méthode utilisant un dynamic, 5 délégués et 15 requêtes linq&#160;&#187; Noob va.&#160;&#187; Ou pour mettre dans [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Un nouvel addin pour Visual Studio va bientôt être mis à disposition par l&rsquo;équipe de Channel 9. </p>
<p>Son but ? Fournir une liste de succès qui seront débloqués en fonction du code que vous écrivez !</p>
<p>Totalement indispensable pour pouvoir se la raconter à la pause café ^^?</p>
<p>&laquo;&nbsp;Quoi ? tu n&rsquo;as pas encore débloquer le succès &laquo;&nbsp;Ecrire une méthode utilisant un dynamic, 5 délégués et 15 requêtes linq&nbsp;&raquo; Noob va.&nbsp;&raquo;</p>
<p>Ou pour mettre dans un CV :</p>
<p>&laquo;&nbsp;Expérience pro : Tout les succès VS 2010 débloqué&nbsp;&raquo;</p>
<p> </p>
<p>Bref ça ne sert à rien mais c&rsquo;est fun. </p>
<p>Pour plus d&rsquo;info c&rsquo;est par ici : </p>
<p><a title="http://dev9.channel9.msdn.com/blogs/c9team/Coming-Soon-Visual-Studio-Achievements" href="http://dev9.channel9.msdn.com/blogs/c9team/Coming-Soon-Visual-Studio-Achievements">http://dev9.channel9.msdn.com/blogs/c9team/Coming-Soon-Visual-Studio-Achievements</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VS 2010 SP1 : Patch pour le détail d&#8217;un build TFS 2008</title>
		<link>https://blog.developpez.com/phenixdotnet/p9827/net/vs_2010_sp1_patch_pour_le_detail_d_un_bu_2008</link>
		<comments>https://blog.developpez.com/phenixdotnet/p9827/net/vs_2010_sp1_patch_pour_le_detail_d_un_bu_2008#comments</comments>
		<pubDate>Tue, 22 Mar 2011 10:54:46 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Si comme moi vous utiliser VS 2010 SP1 et TFS 2008, vous avez sûrement du tomber sur un bug des plus énervant. En effet lors de l&#8217;ouverture d&#8217;une build TFS 2008, VS 2010 SP1 explose tout simplement &#8230; Le patch corrigeant ce problème a été mis à disposition sur Connect le 21/03/2011. Vous pouvez le télécharger à : cette adresse.]]></description>
				<content:encoded><![CDATA[<p>Si comme moi vous utiliser VS 2010 SP1 et TFS 2008, vous avez sûrement du tomber sur un bug des plus énervant.<br />
En effet lors de l&rsquo;ouverture d&rsquo;une build TFS 2008, VS 2010 SP1 explose tout simplement &#8230;<br />
Le patch corrigeant ce problème a été mis à disposition sur Connect le 21/03/2011.<br />
Vous pouvez le télécharger à : <a href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=34824">cette adresse</a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[WCF] Net named pipe et UAC, ce qu’il faut savoir</title>
		<link>https://blog.developpez.com/phenixdotnet/p8549/net/wcf_net_named_pipe_et_uac_ce_quarsquo_il</link>
		<comments>https://blog.developpez.com/phenixdotnet/p8549/net/wcf_net_named_pipe_et_uac_ce_quarsquo_il#comments</comments>
		<pubDate>Fri, 22 Jan 2010 12:00:00 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La question n&#8217;est pas de revenir sur le bien fondé de l&#8217;UAC, le débat n&#8217;a pas ça place ici. Par contre il faut savoir une ou deux choses sur les conséquences que cela peut avoir sur l&#8217;utilisation des tubes nommés (netNamedPipeBinding en WCF). En tant que développeur consciencieux, la première étape consiste à aller lire la documentation de MS sur le sujet. Vous la trouverez par exemple dans le Windows 7 Training Kit,et plus précisément [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>La question n&rsquo;est pas de revenir sur le bien fondé de l&rsquo;UAC, le débat n&rsquo;a pas ça place ici. Par contre il faut savoir une ou deux choses sur les conséquences que cela peut avoir sur l&rsquo;utilisation des tubes nommés (netNamedPipeBinding en WCF).</p>
<p>En tant que développeur consciencieux, la première étape consiste à aller lire la documentation de MS sur le sujet. Vous la trouverez par exemple dans le Windows 7 Training Kit,et plus précisément dans le withepapper de la rubrique &laquo;&nbsp;isolation de la session 0&Prime;. En particulier vous y trouverez ces quelques lignes :</p>
<p>&laquo;&nbsp;If two-way interaction is required, use Windows Communication Foundation (WCF), .NET remoting, named pipes, or any other interprocess communication (IPC) mechanism (excluding window messages) to communicate across sessions.&nbsp;&raquo;</p>
<p>Super ! un coup de WCF et c&rsquo;est gagné.</p>
<p>Sauf que &#8230; Ce que ne précise pas le document c&rsquo;est que le serveur doit être créé par une <a href="http://msdn.microsoft.com/en-us/library/aa382954%28VS.85%29.aspx" target="_blank">session ayant les droits de création d&rsquo;objets globaux</a> (pour informations c&rsquo;est le privilège <a href="http://msdn.microsoft.com/en-us/library/aa375728%28VS.85%29.aspx" target="_blank">SeCreateGlobalPrivilege</a>). Ce qui dans le cas d&rsquo;une session avec l&rsquo;UAC activé est faux (par défaut ce privilège n&rsquo;est accordé qu&rsquo;aux &#8230; Administrateurs locaux !). Impossible donc de faire communiquer deux processus à travers les tubes nommés s&rsquo;ils appartiennent à deux sessions différentes. Notez cependant que si les deux processus sont dans la même session, alors cela fonctionnera très bien, WCF n&rsquo;émettant pas d&rsquo;erreur et se contentant de créer un tube nommé local &#8230;</p>
<p>Bref les tubes nommés et l&rsquo;UAC ne font pas bon ménage. La seule solution que j&rsquo;ai trouvé pour l&rsquo;instant consiste à passer par un TcpBinding à la place mais c&rsquo;est pas le top du tout.</p>
<p>Ah et au passage, un mauvais point pour le training kit 7 qui &laquo;&nbsp;oubli&nbsp;&raquo; de mentionner ce détail &#8230; </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VS 2010 Beta 1 : Utiliser Mono comme framework cible</title>
		<link>https://blog.developpez.com/phenixdotnet/p7759/net/vs_2010_beta_1_utiliser_mono_comme_frame</link>
		<comments>https://blog.developpez.com/phenixdotnet/p7759/net/vs_2010_beta_1_utiliser_mono_comme_frame#comments</comments>
		<pubDate>Wed, 17 Jun 2009 12:26:29 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Une des améliorations de VS 2010 est un meilleur support du multi targeting. Le multi targeting c&#8217;est la possibilité de pouvoir choisir le framework avec lequel on va développer (et donc exécuter) son application. Un développeur de Mono c&#8217;est penché sur le support du multi-targeting dans VS 2010 et à écrit les fichiers nécessaire au support de Mono 2.4 comme framework cible. La procédure d&#8217;installation et les captures sont disponibles sur son site à cette [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Une des améliorations de VS 2010 est un meilleur support du multi targeting. Le multi targeting c&rsquo;est la possibilité de pouvoir choisir le framework avec lequel on va développer (et donc exécuter) son application. Un développeur de Mono c&rsquo;est penché sur le support du multi-targeting dans VS 2010 et à écrit les fichiers nécessaire au support de Mono 2.4 comme framework cible.</p>
<p>La procédure d&rsquo;installation et les captures sont disponibles sur son site à cette adresse : <a title="http://jpobst.blogspot.com/2009/06/mono-in-visual-studio-2010.html" href="http://jpobst.blogspot.com/2009/06/mono-in-visual-studio-2010.html">http://jpobst.blogspot.com/2009/06/mono-in-visual-studio-2010.html</a></p>
<p>L&rsquo;intérêt de tout ça ce situe dans la possibilité de développer des applications Mono sans quitter son environnement préféré ! De plus qui dit ne pas quitter VS c&rsquo;est également pouvoir accéder aux extensions comme, complètement au hasard hein ; ), TFS. </p>
<p>Bref voici une nouvelle qui va pas mal faciliter la vie des développeurs d&rsquo;application cross-plateform ou tout simplement de ceux qui souhaiterais tester leur application avec Mono sans installer une distribution Linux dans un premier temps.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Réhostez le designer de Workflow dans une application WPF</title>
		<link>https://blog.developpez.com/phenixdotnet/p7501/net/rehostez_le_designer_de_workflow_dans_un</link>
		<comments>https://blog.developpez.com/phenixdotnet/p7501/net/rehostez_le_designer_de_workflow_dans_un#comments</comments>
		<pubDate>Mon, 20 Apr 2009 07:51:07 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Mon nouvel article vient d&#8217;etre publié. Il traite des possibilités pour une application métier de réhostez les designers du framework dotnet et en particulier celui de workflow.]]></description>
				<content:encoded><![CDATA[<p><a href="http://vincentlaine.developpez.com/tuto/dotnet/wf-designer/">Mon nouvel article vient d&rsquo;etre publié</a>.</p>
<p>Il traite des possibilités pour une application métier de réhostez les designers du framework dotnet et en particulier celui de workflow. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les dangers de la variance dans C#</title>
		<link>https://blog.developpez.com/phenixdotnet/p7467/net/les_dangers_de_la_variance_dans_c</link>
		<comments>https://blog.developpez.com/phenixdotnet/p7467/net/les_dangers_de_la_variance_dans_c#comments</comments>
		<pubDate>Fri, 10 Apr 2009 10:07:28 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Un des développeurs de l&#8217;équipe de Mono vient de mettre en ligne sur son blog un excellent post traitant des dangers de la variance qui va être introduit dans C# 4.0. Rappelons rapidement ce qu&#8217;est la variance. La variance est une notion liée à l&#8217;utilisation des generics. Elle permet d&#8217;écrire ce genre de chose : public IEnumerable&#60;string&#62; maCollectionDeString; public void Foo(IEnumerable&#60;object&#62; param) { //… } public void Bar { &#160; Foo(maCollectionDeString); } Aujourd&#8217;hui avec C# [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Un des développeurs de l&rsquo;équipe de Mono vient de mettre en ligne sur <a href="http://themonkeysgrinder.blogspot.com/2009/04/whos-afraid-of-generic-variance.html" target="_blank">son blog un excellent post traitant des dangers de la variance qui va être introduit dans C# 4.0</a>.</p>
<p>Rappelons rapidement ce qu&rsquo;est la variance. La variance est une notion liée à l&rsquo;utilisation des generics. Elle permet d&rsquo;écrire ce genre de chose :</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 IEnumerable&lt;string&gt; maCollectionDeString;</div></div>
<p></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 void Foo(IEnumerable&lt;object&gt; param) <br />
{ //… }</div></div>
<p></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 void Bar <br />
{ <br />
&nbsp; Foo(maCollectionDeString); <br />
}</div></div>
<p>Aujourd&rsquo;hui avec C# 3.5 (raccourcis rapide sur les numéros de version, je sais <img src="https://blog.developpez.com/phenixdotnet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> ) cela n&rsquo;est pas possible. Le compilateur sortira en erreur en expliquant que maCollectionDeString n&rsquo;est pas du type attendu IEnumerable(Of object). Pourtant en toute logique on peux écrire cela :</p>
<p>string s = &laquo;&nbsp;toto&nbsp;&raquo;;</p>
<p>object o = s;</p>
<p>Il serait donc logique de pouvoir écrire le code précédent. La variance sur les generics amène cette possibilité.</p>
<p>Au premier abord c&rsquo;est donc une excellente &laquo;&nbsp;feature&nbsp;&raquo; qui va simplifier pas mal de code.</p>
<p>Mais c&rsquo;est aussi une source de problème et de danger qui sont pointés et bien expliqué dans le post.</p>
<p><a href="http://themonkeysgrinder.blogspot.com/2009/04/whos-afraid-of-generic-variance.html" target="_blank">Je vous livre ici l&rsquo;url</a>, attention c&rsquo;est du bon, du haut niveau et il faut s&rsquo;accrocher à ses brettelles <img src="https://blog.developpez.com/phenixdotnet/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Les nouveautés de la beta 1 des parallel extensions (Tasks Parallel Library)</title>
		<link>https://blog.developpez.com/phenixdotnet/p7456/net/les_nouveautes_de_la_beta_1_des_parallel</link>
		<comments>https://blog.developpez.com/phenixdotnet/p7456/net/les_nouveautes_de_la_beta_1_des_parallel#comments</comments>
		<pubDate>Tue, 07 Apr 2009 07:13:00 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[L’équipe en charge du développement de la Task Parallel Library (TPL) vient de mettre en ligne la partie 2/3 de leur “saga” &#34;What’s new in Beta 1 for the Task Parallel Library?”. La partie 1 se trouve à cette adresse : http://blogs.msdn.com/pfxteam/archive/2009/03/27/9514938.aspx et traite principalement de la librairie et du nouveau modèle d’annulation introduit dans le Framework .NET 4.0. &#160; La partie 2 quant à elle, traite d’un sujet à mon sens plus “sympas”. Les [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>L’équipe en charge du développement de la Task Parallel Library (TPL) vient de mettre en ligne la partie 2/3 de leur “saga”</p>
<p>&quot;What’s new in Beta 1 for the Task Parallel Library?”. </p>
<p>La partie 1 se trouve à cette adresse : <a title="http://blogs.msdn.com/pfxteam/archive/2009/03/27/9514938.aspx" href="http://blogs.msdn.com/pfxteam/archive/2009/03/27/9514938.aspx">http://blogs.msdn.com/pfxteam/archive/2009/03/27/9514938.aspx</a> et traite principalement de la librairie et du nouveau modèle d’annulation introduit dans le Framework .NET 4.0.</p>
<p><span id="more-40"></span></p>
<p>&#160;</p>
<p>La partie 2 quant à elle, traite d’un sujet à mon sens plus “sympas”. Les choix du “rollback” par rapport au design de la classe Future. Cette classe que je n’avais pas abordé lors de la session des techdays ni dans mes articles permet d’exécuter du code asynchrone qui renvoi un résultat. </p>
<p>Le “rollback” se situe au notamment au niveau du nom de la classe qui change de Future(Of T) à Task(Of T). Ce changement de nom peut paraitre anecdotique mais il montre bien que le choix de nommage d’une classe est une chose important pour la simplicité de l’utilisation. Parmi les raisons qui ont poussé les développeurs à effectuer ce changement citons : </p>
<ul>
<li>Le fait qu’ils définissaient toujours un Future(Of T) comme “une tâche qui renvoi un ou résultats” </li>
<li>que le nom Future(Of T) ne montrait pas la notion d’héritage entre un Future(Of T) et un Task(Of T) </li>
</ul>
<p>L’autre point du post qui me parait important est l’annonce de l’introduction d’une nouvelle classe appelé “TaskFactory”. Cette fabrique de tâche va permettre d’éviter décrire des choses du genre :</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">List&lt;task&gt; tasks = new List&lt;task&gt;(); &nbsp;<br />
Task children = null; &nbsp;<br />
&nbsp;<br />
FileInfo destFile = null; &nbsp;<br />
&nbsp;<br />
foreach (FileInfo file in di.GetFiles()) &nbsp;<br />
{ &nbsp;<br />
&nbsp; &nbsp;destFile = new FileInfo(Path.Combine(destDir.FullName, file.Name)); &nbsp;<br />
&nbsp; &nbsp;children = Task.Create( &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CopyAndCheckFile, &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new CopyAndCheckFilesThreadParam() { srcFile = file, destFile = destFile }, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TaskManager.Default, TaskCreationOptions.RespectCreatorCancellation); <br />
&nbsp;<br />
&nbsp; &nbsp;tasks.Add(children); &nbsp;<br />
} &nbsp;<br />
&nbsp;<br />
DirectoryInfo subDestDir = null; &nbsp;<br />
&nbsp;<br />
foreach (DirectoryInfo subSrcDir in di.GetDirectories()) &nbsp;<br />
{ &nbsp;<br />
&nbsp; &nbsp; subDestDir = new DirectoryInfo(Path.Combine(destDir.FullName, subSrcDir.Name)); &nbsp;<br />
&nbsp; &nbsp; children = Task.Create( &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CopyFiles, &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;new ThreadParams() { srcDir = subSrcDir, destDir = subDestDir}, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TaskManager.Default, &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TaskCreationOptions.RespectCreatorCancellation); &nbsp;<br />
&nbsp;<br />
&nbsp; &nbsp; tasks.Add(children); &nbsp;<br />
} <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
Task.WaitAll(tasks.ToArray());</div></div>
<p>(Extrait de la deuxième démo de ma session des techdays <img src="https://blog.developpez.com/phenixdotnet/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> ).</p>
<p>Dans cet extrait des tâches sont créées à deux endroits différents mais avec les mêmes options. Le but de la TaskFactory est de positionner les options sur la fabrique et de créer des tâches qui auront directement les bonnes options. Le code de l’exemple en mode “beta 1” donnerais cela : </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">List&lt;task&gt; tasks = new List&lt;task&gt;(); <br />
Task children = null; &nbsp;<br />
TaskFactory factory = new TaskFactory(myScheduler, <br />
&nbsp; TaskCreationOptions.RespectCreatorCancellation, myContinuationOptions); FileInfo destFile = null; foreach (FileInfo file in di.GetFiles()) { destFile = new FileInfo(Path.Combine(destDir.FullName, file.Name)); children = factory.StartNew( CopyAndCheckFile, new CopyAndCheckFilesThreadParam() { srcFile = file, destFile = destFile } ); tasks.Add(children); } DirectoryInfo subDestDir = null; foreach (DirectoryInfo subSrcDir in di.GetDirectories()) { subDestDir = new DirectoryInfo(Path.Combine(destDir.FullName, subSrcDir.Name)); children = factory.StartNew( CopyFiles, new ThreadParams() { srcDir = subSrcDir, destDir = subDestDir} ); tasks.Add(children); } Task.WaitAll(tasks.ToArray());</div></div>
<p>A noter que n’aillant pas accès à cette beta je n’ai pas réussi à déterminer ce qu’est le myScheduler et le myContinuationOptions (bien qu’il me semble logique que cela correspondent respectivement au TaskManager.Default à aux options de continuation en cas d’exception (arrêt immédiat, attente de la fin des tâches enfants, etc, etc, etc) </p>
</p>
<p>Pour finir voici <a href="http://blogs.msdn.com/pfxteam/archive/2009/04/06/9534426.aspx" target="_blank">le lien vers l’article</a> du blog de l’équipe de la TPL</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mais au fait : Silverlight ça sert à quoi ?</title>
		<link>https://blog.developpez.com/phenixdotnet/p7430/net/mais_au_fait_silverlight_ca_sert_a_quoi</link>
		<comments>https://blog.developpez.com/phenixdotnet/p7430/net/mais_au_fait_silverlight_ca_sert_a_quoi#comments</comments>
		<pubDate>Wed, 01 Apr 2009 23:18:23 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[C&#8217;est un peu la question que je me pose après quelques temps d?utilisation. Il est vrai que je prend des risques : Je ne suis pas graphiste (mon gout des couleurs ne serait, au dire de certain, pas très développé ), je cherche à développer des sites web qui ont une forte interaction avec leurs environnements, qui sont dépend de données souvent volumineuses et surtout qui se focalisent sur les actions métiers et pas sur [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>C&rsquo;est un peu la question que je me pose après quelques temps d?utilisation.</p>
<p>Il est vrai que je prend des risques : Je ne suis pas graphiste (mon gout des couleurs ne serait, au dire de certain, pas très développé <img src="https://blog.developpez.com/phenixdotnet/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> ), je cherche à développer des sites web qui ont une forte interaction avec leurs environnements, qui sont dépend de données souvent volumineuses et surtout qui se focalisent sur les actions métiers et pas sur l&rsquo;affichage.</p>
<p>Pourtant Silverlight à tout pour plaire : XAML, C# ou VB.NET et un Framework derrière.</p>
<p>Oui mais voilà : Le Framework Silverlight, bien que basé sur celui de .NET, a été tellement réduit qu?il ne reste plus rien <img src="https://blog.developpez.com/phenixdotnet/wp-includes/images/smilies/icon_sad.gif" alt=":-(" class="wp-smiley" /></p>
<p>Passons sur le fait que l?utilisation d&rsquo;Entity Framework avec Sliverlight est obligatoirement faite à travers des appels REST et que la moindre requête Linq est un vrai calvaire (sans parler du nombre de méthode d?extension qui ont été supprimé (comme Count() par exemple !). Au passage petite expérience personnelle : Je suis revenu aux services web WCF ?traditionnels? qui renvoi des &laquo;&nbsp;List(Of T)&nbsp;&raquo; pour accéder à mes données, ça marche bien mieux <img src="https://blog.developpez.com/phenixdotnet/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> </p>
<p>Passons également sur le fait que le nombre de contrôle fournis par défaut est drastiquement réduit, pour résoudre cela nous avons le Silverlight Toolkit.</p>
<p> </p>
<p>Mais franchement quand on veux faire un site en Silverlight qui ?fait des choses? alors là c?est la galère. Personnellement pour accéder à mes opérations métier je n?est pas besoin d?une super accélération graphique par la carte vidéo, ce qui me faut c?est la possibilité d&rsquo;appeler un webservice externe en https ! Et comme je suis exigeant, il faut également que je puisse lui passer des informations de connexion de type <a href="http://msdn.microsoft.com/fr-fr/library/system.net.networkcredential%28VS.80%29.aspx" target="_blank">NetworkCredential</a>. Or dans Silverlight 2.0, WCF a tellement été taillé en pièce que l?on ne peux même plus fournir des Credential pour la connexion à un service web !</p>
<p>Et pour pousser le bouchon encore plus loin, j&rsquo;aimerais également pouvoir réutiliser mes classes métier qui ne contiennent rien deux/trois fonctions sans être obligé de les extraire de leur librairies (compilé en 3.5) pour les mettre dans une librairie Silverlight. </p>
<p> </p>
<p>Bref <strong>ma</strong> conclusion de tout ça c?est que Silverlight, c&rsquo;est beau, c&rsquo;est cool, c&rsquo;est du XAML, mais alors c&rsquo;est vraiment, vraiment pas fait pour être utilisé en entreprise. Et apparemment Silverlight 3.0 ne va changer la donne? De mon coté tant que la réutilisabilité de l?existant ne sera pas amélioré, je ne pense pas que je ne pousserais pas la technologie en avant. Je vais plutôt aller voir du coté du <a href="http://www.asp.net/mvc/" target="_blank">Framework MVC</a> avec lequel j&rsquo;ai eu l&rsquo;occasion de jouer en version RC et qui m&rsquo;avait beaucoup plus. Par contre si vous avez des vidéos, des images, et peu de code, alors oui Silverlight c&rsquo;est le pied.</p>
<p> </p>
<p>Une dernière chose : Si quelqu&rsquo;un peut m&rsquo;expliquer pourquoi la classe NetworkCredential et l&rsquo;authentification d&rsquo;un utilisateur sur un service web en général a été supprimé de Silverlight, je suis preneur.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Les cachoteries de Microsoft France</title>
		<link>https://blog.developpez.com/phenixdotnet/p7400/net/les_cachoteries_de_microsoft_france</link>
		<comments>https://blog.developpez.com/phenixdotnet/p7400/net/les_cachoteries_de_microsoft_france#comments</comments>
		<pubDate>Tue, 24 Mar 2009 10:33:44 +0000</pubDate>
		<dc:creator><![CDATA[dev01]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Général]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Une fois n&#8217;est pas coutume, Microsoft France a publié une vidéo sur youtube assez énigmatique : Alors avez vous deviné ? Un nouveau Tony Hawk&#8217;s Pro :aie: ? Une annonce sur Windows Seven ? La sortie de VS 2010 ? (ok j&#8217;arrête de rêver) Quelles sont vos hypothèses ? je doit avouer que personnellement je sèche complètement.]]></description>
				<content:encoded><![CDATA[<p>Une fois n&rsquo;est pas coutume, Microsoft France a publié une vidéo sur youtube assez énigmatique :</p>
<p><iframe src="http://www.dailymotion.com/embed/video/x8rhm9" width="500" height="350" frameborder="0"></iframe></p>
<p>Alors avez vous deviné ?</p>
<p>Un nouveau Tony Hawk&rsquo;s Pro :aie: ?<br />
Une annonce sur Windows Seven ?<br />
La sortie de VS 2010 ? (ok j&rsquo;arrête de rêver)</p>
<p>Quelles sont vos hypothèses ? je doit avouer que personnellement je sèche complètement.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
