<?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>Benjamin Soulier Blog</title>
	<atom:link href="http://www.soulier.ch/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.soulier.ch</link>
	<description>foreach (var moment in Life) { Enjoy(moment); }</description>
	<lastBuildDate>Fri, 17 May 2013 10:01:52 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Comment se connecter de mainère sécurisée à Azure Web Site en utilisant un QR Code et Windows Phone ?</title>
		<link>http://www.soulier.ch/?p=1851</link>
		<comments>http://www.soulier.ch/?p=1851#comments</comments>
		<pubDate>Tue, 26 Feb 2013 15:48:22 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1851</guid>
		<description><![CDATA[Salut à tous, Ma vidéo montrant comment utiliser un QR Code pour obtenir une sécurité renforcée pour accéder à des sites Webs en ligne et disponible sur le Site Microsoft de Channel9, dans l&#8217;émission Web Camps que j&#8217;ai enregistré à mon passage à Redmond. Bonne lecture :)]]></description>
				<content:encoded><![CDATA[<p>Salut à tous,</p>
<p>Ma <a href="http://channel9.msdn.com/Shows/Web+Camps+TV/Benjamin-Soulier-Logs-into-a-Web-Site-Using-a-Bar-Code-and-Windows-Phone" target="_blank">vidéo</a> montrant comment utiliser un QR Code pour obtenir une sécurité renforcée pour accéder à des sites Webs en ligne et disponible sur le Site Microsoft de Channel9, dans l&rsquo;émission <a href="http://channel9.msdn.com/Shows/Web+Camps+TV" target="_blank">Web Camps</a> que j&rsquo;ai enregistré à mon passage à Redmond.</p>
<p>Bonne lecture :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1851</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>{&#171;&#160;Message&#160;&#187;:&#160;&#187;An error has occurred.&#160;&#187;} en déployant votre site web Windows Azure</title>
		<link>http://www.soulier.ch/?p=1802</link>
		<comments>http://www.soulier.ch/?p=1802#comments</comments>
		<pubDate>Mon, 28 Jan 2013 20:46:53 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1802</guid>
		<description><![CDATA[Je travaillais ces jours-ci sur le déploiement de quelques sites développés sur MVC4 API Web, en utilisant Entity Framework avec les types spatiaux (types Geometry et Geopraphy). Tout allait bien sur ma machine de dev, mais cela ne fonctionnait as en déployant ma solution sur Azure. La plupart de mes appels WebAPIs me donnaient comme erreur: {&#171;&#160;message&#160;&#187;: &#171;&#160;An [...]]]></description>
				<content:encoded><![CDATA[<p>Je travaillais ces jours-ci sur le déploiement de quelques sites développés sur MVC4 API Web, en utilisant Entity Framework avec les types spatiaux (types Geometry et Geopraphy).</p>
<p>Tout allait bien sur ma machine de dev, mais cela ne fonctionnait as en déployant ma solution sur Azure.</p>
<p>La plupart de mes appels WebAPIs me donnaient comme erreur: {&laquo;&nbsp;message&nbsp;&raquo;: &laquo;&nbsp;An error has occurred.&nbsp;&raquo;}</p>
<p>Cela provient d&rsquo;une assembly manquante dans les binaires qui sont déployés avec votre site.</p>
<p>Il suffit d&rsquo;ouvrir votre gestionnaire de packages Nuget, de chercher le package &nbsp;&raquo;Microsoft.SqlServer.Types&nbsp;&raquo; et de l&rsquo;ajouter à votre projet.</p>
<p>Tada <img src='http://www.soulier.ch/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1802</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contenu de la session &#171;&#160;Gestion de contenu Web avec SharePoint 2013&#8243; disponible</title>
		<link>http://www.soulier.ch/?p=1785</link>
		<comments>http://www.soulier.ch/?p=1785#comments</comments>
		<pubDate>Mon, 10 Dec 2012 19:48:35 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[SP 2010]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1785</guid>
		<description><![CDATA[Notre session  des Techdays suisses de 2012 est disponible depuis peu sur le site de Channel 9. Vous pouvez trouver la vidé de cette présentation ici, et les slides ici. Happy coding!]]></description>
				<content:encoded><![CDATA[<p>Notre session  des Techdays suisses de 2012 est disponible depuis peu sur le site de Channel 9.</p>
<p>Vous pouvez trouver la vidé de cette présentation <a href="http://t.co/zTnz2ltn" target="_blank">ici</a>, et les slides <a href="http://t.co/IQroYKm9" target="_blank">ici</a>.</p>
<p>Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1785</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Faites que le titre de vos webparts soit localisable</title>
		<link>http://www.soulier.ch/?p=1751</link>
		<comments>http://www.soulier.ch/?p=1751#comments</comments>
		<pubDate>Mon, 22 Oct 2012 18:18:22 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[SP 2010]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1751</guid>
		<description><![CDATA[Dans de nombreux projets traitant de localisation, j&#8217;ai du localiser le contenu de WebParts, de User Controls ou d&#8217;Application Pages, et SharePoint 2010 au travers des APIs de ASP.NET le permet assez bien. Mais pour localiser le titre d&#8217;une WebPart, là&#8230; Il n&#8217;y a pas vraiment de solution toute faite. J&#8217;ai donc pris mes petites [...]]]></description>
				<content:encoded><![CDATA[<p>Dans de nombreux projets traitant de localisation, j&rsquo;ai du localiser le contenu de WebParts, de User Controls ou d&rsquo;Application Pages, et SharePoint 2010 au travers des APIs de ASP.NET le permet assez bien.</p>
<p>Mais pour localiser le titre d&rsquo;une WebPart, là&#8230; Il n&rsquo;y a pas vraiment de solution toute faite.</p>
<p>J&rsquo;ai donc pris mes petites mains et j&rsquo;ai écrit une joli classe abstraite, qui flanquée de quelques classes helper me permet de faire ceci; il me suffit tout simplement d&rsquo;hériter de ma nouvelle classe <strong>LocalizableWebPart</strong> et le tour est joué !</p>
<p>Une fois la webpart héritée, il suffit de changer l&rsquo;héritagede ses WebParts customs de <strong>WebPart</strong> en <strong>LocalizableWebPart</strong>.</p>
<p>Pour exemple, le code de cette classe:</p>
<pre class="brush: csharp; title: ; notranslate">
public abstract class LocalizableTitleWebPart : WebPart
{
    [WebPartStorage(Storage = Storage.Shared)]
    public string LocalizedTitle { get; set; }

    private LangageContainer langContainer = null;

    protected string GetLocalizedProperty(LangageContainer container, string content)
    {
        if (container != null)
        {
            return container.GetOrInsertLanguage().EncodedLanguageContent;
        }
        else
        {
            container = LocalizationHelper.GetLanguagesContent(content);
            return container.GetOrInsertLanguage().EncodedLanguageContent;
        }
    }

    protected string SetLocalizedProperty(LangageContainer container, string content, string value)
    {
        container = LocalizationHelper.GetLanguagesContent(content);
        var lang = container.GetOrInsertLanguage();

        if (this.Page != null &amp;&amp; this.Page.IsPostBack)
        {
            container.UpdateLanguage(lang.LanguageCode, value);
            return LangageContainer.Serialize(container);
        }
        return content;
    }

    public override string Title
    {
        get
        {
            return GetLocalizedProperty(langContainer, this.LocalizedTitle);
        }
        set
        {
            this.LocalizedTitle = SetLocalizedProperty(langContainer, this.LocalizedTitle, value);
        }
    }
}
</pre>
<p>Ce que vous pouvez voir dans le code au dessus:</p>
<ul>
<li>une propriété WebPart automatiquement persistée qui stocke le contenu des langues du titre en XML,</li>
<li>deux méthodes pour récupérer et sauvegarder la valeur de la langue courante.</li>
</ul>
<p>Vous pouvez trouver le code de cette classe avec un exemple de WebPart dans le repo Git suivant:</p>
<p><a href="https://github.com/JaYmZ666/localizableTitleWebPart">https://github.com/JaYmZ666/localizableTitleWebPart</a></p>
<p>Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1751</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rejoignez-nous aux Techdays 2013 à Lausanne !</title>
		<link>http://www.soulier.ch/?p=1774</link>
		<comments>http://www.soulier.ch/?p=1774#comments</comments>
		<pubDate>Sat, 29 Sep 2012 18:25:02 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[SP 2010]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1774</guid>
		<description><![CDATA[Cher visiteur, Cette année, les Microsoft Techdays se tiendront Conrès Beaulieu à Lausanne, du 6 au 7th novembre. Yves Peneveyre et moi même vous présenteront une session autour de la gestion de contenu web avec SharePoint 2013. Je serai présent sur le stand de CTP pour ceux qui souhaiteraient aborder plus longuement les sujets de notre sessions ou [...]]]></description>
				<content:encoded><![CDATA[<p>Cher visiteur,</p>
<p>Cette année, les Microsoft Techdays se tiendront <a href="http://www.microsoft.com/fr-ch/events/techdays/" target="_blank">Conrès Beaulieu à Lausanne</a>, du 6 au 7th novembre.</p>
<p><a href="https://twitter.com/ypeneveyre" target="_blank">Yves Peneveyre</a> et moi même vous présenteront une session autour de la gestion de contenu web avec SharePoint 2013.</p>
<p>Je serai présent sur le stand de <a href="http://www.ctp-consulting.com/FR/Pages/Home.aspx" target="_blank">CTP</a> pour ceux qui souhaiteraient aborder plus longuement les sujets de notre sessions ou encore tout ce qui touche au Cloud Computing <img src='http://www.soulier.ch/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Au plaisir de vous rencontrer là-bas !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1774</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVP sur Windows Azure MVP pour une année de plus!</title>
		<link>http://www.soulier.ch/?p=1293</link>
		<comments>http://www.soulier.ch/?p=1293#comments</comments>
		<pubDate>Thu, 12 Jul 2012 08:02:34 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1293</guid>
		<description><![CDATA[J&#8217;ai le plaisir de partager l&#8217;annonce de ma nouvelle année en tant que MVP sur Windows Azure. Je suis très heureux de pouvoir partager mon enthousiasme et mes connaissance sur cette plate-forme pleine de potentiel et d&#8217;avenir, avec une équipe aussi compétente et efficace. J&#8217;espère pouvoir offrir toujours plus dans cet optique de partage que [...]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai le plaisir de partager l&rsquo;annonce de ma nouvelle année en tant que MVP sur Windows Azure.</p>
<p>Je suis très heureux de pouvoir partager mon enthousiasme et mes connaissance sur cette plate-forme pleine de potentiel et d&rsquo;avenir, avec une équipe aussi compétente et efficace.</p>
<p>J&rsquo;espère pouvoir offrir toujours plus dans cet optique de partage que j&rsquo;affectionne particulièrement dans les mois qui viennent <img src='http://www.soulier.ch/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Merci!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1293</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 et inconsistences de recherche : Phonetic Search</title>
		<link>http://www.soulier.ch/?p=1215</link>
		<comments>http://www.soulier.ch/?p=1215#comments</comments>
		<pubDate>Tue, 10 Apr 2012 10:26:46 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[SP 2010]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1215</guid>
		<description><![CDATA[J&#8217;a eu un problème très intéressant ave la recherche de SharePoint 2010, qui peut être assez difficile à cerner. J&#8217;ai donc un crawl content source pointant sur mon MySiteHost, tous les profils utilisateurs bien indexés. Pour un étrange raison, J&#8217;avis certaines fois des résultats différents en entrant partiellement un nom ou prénom, ou parfois même pas de résultat [...]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;a eu un problème très intéressant ave la recherche de SharePoint 2010, qui peut être assez difficile à cerner.</p>
<p>J&rsquo;ai donc un crawl content source pointant sur mon MySiteHost, tous les profils utilisateurs bien indexés.</p>
<p>Pour un étrange raison, J&rsquo;avis certaines fois des résultats différents en entrant partiellement un nom ou prénom, ou parfois même pas de résultat du tout&#8230;<img title="Lire la suite…" src="http://www.soulier.ch/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /><span id="more-1215"></span></p>
<p>Voici le résultat en cherchant un prénom en entier:</p>
<p><a href="http://www.soulier.ch/wp-content/uploads/2012/04/1fullname.png"><img title="1fullname" src="http://www.soulier.ch/wp-content/uploads/2012/04/1fullname.png" alt="" width="342" height="205" /></a></p>
<p>E voilà celuis avec une partie du même prénom:</p>
<p><a href="http://www.soulier.ch/wp-content/uploads/2012/04/2partialname1.png"><img title="2partialname" src="http://www.soulier.ch/wp-content/uploads/2012/04/2partialname1.png" alt="" width="343" height="134" /></a></p>
<p>Le <strong>plus étrange</strong> est que le résultat était ok sur un autre ordinateur, même avec une partie du prénom:</p>
<p><a href="http://www.soulier.ch/wp-content/uploads/2012/04/3fullname.png"><img title="3fullname" src="http://www.soulier.ch/wp-content/uploads/2012/04/3fullname.png" alt="" width="342" height="205" /></a></p>
<p><strong>SOLUTION:</strong></p>
<p>SharePoint 2010 a introduit une nouvelle fonctionnalité pour la recherche nommée &laquo;&nbsp;Phonetic Search&nbsp;&raquo;, qui utilise la langue du browser pour configurer le Phonetic Search.</p>
<p>Dans ce cas, la majorité des utilisateurs avaient la langue &laquo;&nbsp;French (Switzerland) [fr-CH]&nbsp;&raquo; en langue par défaut, qui ne semle pas faire bon ménage pour déduire les termes de recherche avec le Phonetic Search&#8230;</p>
<p>Pour sésoudre ce problème, 2 options :</p>
<ol>
<li>Changer la langue par défaut de tous les navigateurs de la companie en &nbsp;&raquo;English&nbsp;&raquo; (<span style="color: #ff0000;">MAUVAISE IDEE</span>, mmmhhh c&rsquo;est vraiment une option ça??),</li>
<li>Changer la langue utilisée dans l&rsquo;Enterprise Search pour faire la recherche avec une langue fixe(<span style="color: #008000;">BONNE IDEE</span>).</li>
</ol>
<p>Allons donc dans la page &laquo;&nbsp;Search Results&nbsp;&raquo; du site d&rsquo;Enterprise Search (nom par défaut &nbsp;&raquo;peopleresults.aspx&nbsp;&raquo;) et éditez la page.</p>
<p>Une fois dans la page, éditez la webpart &laquo;&nbsp;Search Core Results&nbsp;&raquo;.</p>
<p>Allez dans la section &nbsp;&raquo;Result Query Options&nbsp;&raquo; et changet la valeur de &laquo;&nbsp;Query Language&nbsp;&raquo; de &laquo;&nbsp;Browser Locale&nbsp;&raquo; à &laquo;&nbsp;English&nbsp;&raquo;:</p>
<p><a href="http://www.soulier.ch/wp-content/uploads/2012/04/4settingschange.png"><img title="4settingschange" src="http://www.soulier.ch/wp-content/uploads/2012/04/4settingschange.png" alt="" width="153" height="279" /></a></p>
<p>(<strong>PS</strong>: N&rsquo;oubliez pas de faire un &laquo;&nbsp;Check In&nbsp;&raquo; et un &nbsp;&raquo;Publish a Major version&nbsp;&raquo; de la page car le site Enterprise Search utilise les Publishing features)</p>
<p>Maintenant retournons faire la même recherche, et voilà!</p>
<p><a href="http://www.soulier.ch/wp-content/uploads/2012/04/3fullname.png"><img title="3fullname" src="http://www.soulier.ch/wp-content/uploads/2012/04/3fullname.png" alt="" width="342" height="205" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1215</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video de mon interview &#171;&#160;Start Something&#160;&#187; sur Windows Azure</title>
		<link>http://www.soulier.ch/?p=1789</link>
		<comments>http://www.soulier.ch/?p=1789#comments</comments>
		<pubDate>Thu, 08 Mar 2012 20:46:13 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1789</guid>
		<description><![CDATA[Je me suis rendu à Paris pour enregistrer une vidéo avec Microsoft dans le cadre de la campagne &#171;&#160;Start Something&#160;&#187; avec Windows Azure. Dans cette vidéo, je donne mon point de vue sur les intérêts de cette plateforme pour accélérer et simplifier de développement d&#8217;applications dans le nuage, avec une simplicité de Scaling impressionnante. La [...]]]></description>
				<content:encoded><![CDATA[<p>Je me suis rendu à Paris pour enregistrer une vidéo avec Microsoft dans le cadre de la campagne &laquo;&nbsp;Start Something&nbsp;&raquo; avec Windows Azure.</p>
<p>Dans cette vidéo, je donne mon point de vue sur les intérêts de cette plateforme pour accélérer et simplifier de développement d&rsquo;applications dans le nuage, avec une simplicité de Scaling impressionnante.</p>
<p>La vidéo se trouve <a href="http://msdn.microsoft.com/fr-fr/windowsazure/benjamin-soulier" target="_blank">ici</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1789</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Timer Job pour SharePoint 2010 avec un scope Farm : &#171;&#160;Cannot change a recurring schedule to a one-time schedule (and vice versa) for a job definition&#160;&#187;</title>
		<link>http://www.soulier.ch/?p=1234</link>
		<comments>http://www.soulier.ch/?p=1234#comments</comments>
		<pubDate>Thu, 01 Mar 2012 21:47:43 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[SP 2010]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1234</guid>
		<description><![CDATA[Durant un exercice de de style pour coder un Timer Job activable au scope &#171;&#160;Farm&#160;&#187;, j&#8217;ai écrit ce code asez standard pour aciver mon Timer Job: Lors du déploiement, j&#8217;obtenai cette erreur : &#171;&#160;Cannot change a recurring schedule to a one-time schedule (and vice versa) for a job definition.&#160;&#187; Pour résoudre ce problème il faut [...]]]></description>
				<content:encoded><![CDATA[<p>Durant un exercice de de style pour coder un Timer Job activable au scope &laquo;&nbsp;Farm&nbsp;&raquo;, j&rsquo;ai écrit ce code asez standard pour aciver mon Timer Job:</p>
<pre class="brush: csharp; title: ; notranslate">
public override void FeatureActivated(SPFeatureReceiverProperties properties) 
{
    foreach (var s in SPFarm.Local.Services)
    {
        if (s.DisplayName.Contains(&quot;WSS_Administration&quot;))
        {
            DeleteJob(s.JobDefinitions);
            CustomTimerJob job1 = new CustomTimerJob(s);

            SPMinuteSchedule schedule = new SPMinuteSchedule();
            schedule.BeginSecond = 0;
            schedule.EndSecond = 59;
            schedule.Interval = 1;
            s.JobDefinitions.Add(job1);
            job1.Schedule = schedule;
            job1.Update(true);
        }
    }
}
</pre>
<p>Lors du déploiement, j&rsquo;obtenai cette erreur :</p>
<p>&laquo;&nbsp;<span style="color: #ff0000;">Cannot change a recurring schedule to a one-time schedule (and vice versa) for a job definition</span>.&nbsp;&raquo;</p>
<p><span id="more-1234"></span></p>
<p>Pour résoudre ce problème il faut que le Timer Job définisse son Schedule dans son constructeur, et non à l&rsquo;activation (il semblerait que ce soit la création d&rsquo;un Timer Job au scope Farm qui l&rsquo;oblige) :</p>
<pre class="brush: csharp; title: ; notranslate">
public CustomTimerJob(SPService service) : base(JobName, service, null, SPJobLockType.Job)
{
    this.Title = JobName;
    SPMinuteSchedule sc = new SPMinuteSchedule();
    sc.BeginSecond = 0;
    sc.EndSecond = 59;
    sc.Interval = 1;
    this.Schedule = sc;
}
</pre>
<p>Thanks for watching <img src='http://www.soulier.ch/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1234</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 &#8211; Custom Service Application : &#171;&#160;Starter project&#160;&#187; avec base de données</title>
		<link>http://www.soulier.ch/?p=1163</link>
		<comments>http://www.soulier.ch/?p=1163#comments</comments>
		<pubDate>Sun, 12 Feb 2012 17:27:25 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[SP 2010]]></category>

		<guid isPermaLink="false">http://www.soulier.ch/?p=1163</guid>
		<description><![CDATA[Durant cette dernière semaine, j&#8217;ai  pu travailler sur l&#8217;utilisation des Service Applications au sein de SharePoint 2010. Alors qu&#8217;est-ce qu&#8217;une Service Application ? Si on regarde un peu comment celles-si sont utilisés dans SharePoint 2010, ce sont : des &#171;&#160;extensions&#160;&#187; qui peuvent être utilisé depuis n&#8217;importe quelle site de SharePoint, des &#171;&#160;applications&#160;&#187; à part entière, qui peuvent être [...]]]></description>
				<content:encoded><![CDATA[<p>Durant cette dernière semaine, j&rsquo;ai  pu travailler sur l&rsquo;utilisation des Service Applications au sein de SharePoint 2010.</p>
<p>Alors qu&rsquo;est-ce qu&rsquo;une Service Application ?</p>
<p><span id="more-1163"></span></p>
<p>Si on regarde un peu comment celles-si sont utilisés dans SharePoint 2010, ce sont :</p>
<ul>
<li>des &laquo;&nbsp;extensions&nbsp;&raquo; qui peuvent être utilisé depuis n&rsquo;importe quelle site de SharePoint,</li>
<li>des &laquo;&nbsp;applications&nbsp;&raquo; à part entière, qui peuvent être instanciées sur un ou plusieurs Application Server, SharePoint faisant alors le Load Balancing pour le service.</li>
</ul>
<p>Les services Applications fournies par Microsoft dans SharePoint 2010 suivent bien cette logique:</p>
<p><a href="http://www.soulier.ch/wp-content/uploads/2012/02/ServiceApps.png"><img class="alignnone  wp-image-1167" title="ServiceApps" src="http://www.soulier.ch/wp-content/uploads/2012/02/ServiceApps.png" alt="" width="518" height="299" /></a></p>
<p>Elles sont utilisables quelque-soit la WebApp ou la Site Collection; mais le point le plus important de ces Service Applications et surtout de fédérer l&rsquo;accès à ce service aussi depuis d&rsquo;autres fermes SharePoint, pour réutiliser un service (exemple évident du &laquo;&nbsp;User Profile Service&nbsp;&raquo;.</p>
<p>Pour m&rsquo;être intéressé au développement d&rsquo;une custom Service Application, je dois avouer que la tâche n&rsquo;est pas ds plus simples, car nombre d&rsquo;exemples que l&rsquo;on peut trouver sont ou trop succincts (pas de partie pour la connexion à une base de données) ou trop décousues (pas de solution utilisables dans Visual Studio, mais quelques classes dans une page web ou dans des fichiers Word&#8230;).</p>
<p>J&rsquo;ai donc pris me petites mimines et j&rsquo;ai écrit une solution en m&rsquo;aidant de certains articles trouvées sur le web (comme <a href="http://daniellarson.wordpress.com/2011/11/18/step-by-step-sharepoint-service-applications-part-4-deploying-the-solution/" target="_blank">celui-ci</a> ou <a href="http://www.harbar.net/articles/sp2010sa2.aspx" target="_blank">celui-là</a> pour l&rsquo;explication logique en détails), afin d&rsquo;avoir une solution de Service Application déployable et fonctionnelle dans SharePoint 2010.</p>
<p>Pour ceux qui ne connaissent pas trop le mode de fonctionnement d&rsquo;une telle solution, voici une explication courte de sa mise en place :</p>
<ul>
<li>on déploie le WSP dans la Central Admin; le SPIisService est installé dans SharePoint et disponible,</li>
<li>on accède dans la Central Admin à la page &laquo;&nbsp;Services on Server&nbsp;&raquo; et on vérifie qu&rsquo;un moins un serveur de la ferme a notre service démarré,</li>
<li>on crée notre service en utilisant la page &laquo;&nbsp;Manage Service Applications&nbsp;&raquo;, bouton &laquo;&nbsp;new&nbsp;&raquo;,</li>
<li>on utilise la webpart &laquo;&nbsp;TestWebpart&nbsp;&raquo; aussi présent dans notre solution qui utilise notre Service Application.</li>
</ul>
<p>La partie implémentation n&rsquo;est toute fois pas une partie à négliger, car une Service Application contient de nombreuses classes qu&rsquo;il faut dériver.</p>
<p>Et voilà!</p>
<p>Une petit résumé de ce que fait cette Servie Application:</p>
<ul>
<li>elle crée un service SPIisService dans SharePoint 2010,</li>
<li>lors que l&rsquo;on va créer le service dans &laquo;&nbsp;Manage Service Applications&nbsp;&raquo;, elle crée une database avec un script custom &laquo;&nbsp;CreateDatabase.sql&nbsp;&raquo; qui se trouve dans la solution, mais aussi le proxy de votre Service (pou être accédé depuis &lsquo;importe quel partie de votre code frontend)</li>
<li>elle utilise une Webpart simple qui fait un appel au proxy de notre Service Application qui va chercher une valeur basique en base.</li>
</ul>
<p>Un petit rappel pour la notion de performance : vous n&rsquo;aurez pas plus rapide qu&rsquo;une requête faite dans une DB, surtout si vous comparez avec une requête faite dans une liste SP <img src='http://www.soulier.ch/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Petit screenshot d&rsquo;un appel fait à mon service depuis ma webpart de test, le tout sur une machine de Dev (le tout <strong>en moins de 7ms!</strong>) :</p>
<p><a href="http://www.soulier.ch/wp-content/uploads/2012/02/WCFCall.jpg"><img class="alignnone  wp-image-1168" title="WCFCall" src="http://www.soulier.ch/wp-content/uploads/2012/02/WCFCall.jpg" alt="" width="441" height="171" /></a></p>
<p>Je souhaite ajouter que mon scénario permet la création d&rsquo;une Service Application depuis l&rsquo;administration de SharePoint et même d&rsquo;en choisir son nom. Comme les classes d&rsquo;une Service Application sont juste une base, on pourrait très bien gérer la création d&rsquo;une Service Application unique à l&rsquo;activation d&rsquo;une feature , et d&rsquo;interdire une création d&rsquo;instance supplémentaire.</p>
<p>Voici donc le <a href="http://www.soulier.ch/wp-content/uploads/2012/02/CH.BSoulier.ServiceApplication.zip" target="_blank">code promis</a>, merci de me donner vos opinions ou suggestions qui sont bien sûr les bienvenues.</p>
<p>Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.soulier.ch/?feed=rss2&#038;p=1163</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
