﻿<?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>Tag PackageHost - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/tag/packagehost/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/tag/packagehost/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Thu, 19 Apr 2018 08:16:29 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://developer.myconstellation.io/wp-content/uploads/2016/02/256x256-e1457476015859.png</url>
	<title>Tag PackageHost - Constellation</title>
	<link>https://developer.myconstellation.io/tag/packagehost/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Créez votre premier package Constellation en C#</title>
		<link>https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-csharp/</link>
					<comments>https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-csharp/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Wed, 16 Mar 2016 10:00:22 +0000</pubDate>
				<category><![CDATA[.NET API]]></category>
		<category><![CDATA[Guide de démarrage]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[PackageHost]]></category>
		<category><![CDATA[WriteLog]]></category>
		<category><![CDATA[Setting]]></category>
		<category><![CDATA[Publish]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=1287</guid>

					<description><![CDATA[<p>Dans cet article nous allons découvrir comment créer et déployer votre premier package Constellation en C# avec Visual Studio. Prérequis Un accès “Administrator” à une Constellation (Management API &#38; Developper access) Le SDK Constellation installé Nous vous conseillons de suivre</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-csharp/">Créez votre premier package Constellation en C#</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Dans cet article nous allons découvrir comment créer et déployer votre premier package Constellation en C# avec Visual Studio.</p>
<p style="text-align: center;"><span id="more-1287"></span><br />
<iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/wo3960Gwv6k" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Prérequis</h3>
<ul>
<li>Un accès “Administrator” à une Constellation (Management API &amp; Developper access)</li>
<li>Le SDK Constellation installé</li>
</ul>
<p>Nous vous conseillons de suivre <a href="/getting-started/installer-constellation/">le guide de démarrage ici</a> avant de démarrer.</p>
<h3>Créez le package dans Visual Studio</h3>
<ul>
<li>Lancez Visual Studio</li>
<li>Créez un nouveau projet de type “Constellation Package Console” (dans la catégorie Constellation) :</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-98.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Création d'un package Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-75.png" alt="Création d'un package Constellation" width="424" height="294" border="0" /></a></p>
<ul>
<li>Démarrez le package en mode debug en cliquant sur le bouton “Start” ou en pressant la touche “F5” :</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-160.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Debugging Visual Studio" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-137.png" alt="Debugging Visual Studio" width="424" height="111" border="0" /></a></p>
<ul>
<li>
<div align="left">Au démarrage, votre package affichera une sorte de ”Hello World” :</div>
</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-100.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Hello World" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-77.png" alt="Hello World" width="424" height="209" border="0" /></a></p>
<p align="left">Vous constaterez que :</p>
<ul>
<li>
<div align="left">La méthode “<em>OnStart</em>” est la méthode invoquée au démarrage de votre package</div>
</li>
<li>
<div align="left"><em>PackageHost.WriteInfo</em> est une méthode pour écrire des logs de type “info”</div>
</li>
<li>
<div align="left">PackageHost.IsRunning = true (votre package est bien en cours)</div>
</li>
<li>
<div align="left">PackageHost.IsConnected = false (votre package n’est pas connecté à Constellation, car nous l’avons lancé en local)</div>
</li>
</ul>
<h3 align="left">Fonctionnement de base</h3>
<p align="left">Un package est une application !</p>
<p align="left">Il faut impérativement appeler la méthode “<em>PackageHost.Start</em>” au démarrage de l’application, c’est à dire dans la méthode “Main” autrement, ce n’est pas un package Constellation mais une simple application !</p>
<p align="left">Lorsque vous appelez la méthode “<em>PackageHost.Start</em>” vous devez impérativement transférer les arguments (args) et indiquer la classe de votre package qui est dans notre exemple “Program”.</p>
<p></p><pre class="crayon-plain-tag">static void Main(string[] args)
{
    PackageHost.Start&lt;Program&gt;(args);
}</pre><p></p>
<p align="left">La classe d’un package doit être une classe qui implémente l’interface “<u>IPackage</u>”. Cette interface définie trois méthodes :</p>
<ul>
<li>
<div align="left"><u>OnStart</u> qui sera invoqué lorsque le package a démarré</div>
</li>
<li>
<div align="left"><u>OnPreShutdown</u> : invoqué lorsque le package va s’arrêter (à ce stade votre package est toujours connecté à Constellation, vous pouvez encore pusher des StateObjects, envoyer des messages, écrire des logs sur le hub, etc..)</div>
</li>
<li>
<div align="left">OnShutdown : invoqué après le <u>OnPreShutdown</u> et après avoir fermé les connexions.</div>
</li>
</ul>
<p>Pour vous éviter de devoir implémenter ces trois méthodes, votre classe peut hériter de la classe “PackageBase”. Cette classe abstraite implémente l’interface <u>IPackage</u> dans des méthodes virtuelles vides.</p>
<p>Libre à vous d’implémenter les méthodes que vous souhaitez !</p>
<p>Dans le template de projet créé ci-dessus, la classe “Program” hérite de “PackageBase” et redéfinie la méthode “OnStart” pour écrire un message de type “info” (<em>PackageHost.WriteInfo</em>) lorsque le package a démarré.</p>
<h3>Ecrire des logs</h3>
<p>Pour écrire des logs depuis un package Constellation vous disposez des méthodes :</p>
<ul>
<li>PackageHost.WriteDebug</li>
<li>PackageHost.WriteInfo</li>
<li>PackageHost.WriteWarn</li>
<li>PackageHost.WriteError</li>
</ul>
<p>Chacune de ces méthodes écrivent un message qui peut être formaté avec des arguments à la manière d’un “string.Format” :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.WriteInfo("Je suis le package nommé {0} version {1}", PackageHost.PackageName, PackageHost.PackageVersion);</pre><p></p>
<p><u>Attention</u> : bien respecter les index dans le format de votre message sous peine d’avoir une erreur.</p>
<p><u>Note</u> : la méthode WriteDebug écrit seulement dans la console (mode debug local). Les logs de type “Debug” ne sont jamais envoyés dans la Constellation.</p>
<h3>Accéder aux settings</h3>
<p>Chaque package peut définir des paramètres de configuration définis au niveau du serveur Constellation. Cela vous permet de changer ces paramètres directement depuis la Constellation qui se chargera de redescendre ces paramètres sur vos packages.</p>
<p>Il y a deux types de settings :</p>
<ul>
<li>Les “Setting Value” : très simple il s’agit d’un couple clé/value à l’instant des &lt;appSettings&gt; d’une application .NET</li>
<li>Les “Setting Content”  : au lieu de définir la valeur d’un paramètre dans un attribut XML, on peut la définir dans un élément XML enfant permettant d’avoir des settings qui renferme du XML ou JSON</li>
</ul>
<p>Voici par exemple des “SettingValues”  déclarés dans notre configuration :</p>
<p></p><pre class="crayon-plain-tag">&lt;setting key="MyBoolSetting" value="true" /&gt;      
&lt;setting key="MyStringSetting" value="This is a string" /&gt;
&lt;setting key="MyIntSetting" value="123" /&gt;</pre><p></p>
<p>Ces trois settings définissent la valeur dans l’attribut “value” (= SettingValue).</p>
<p>Pour récupérer la valeur du paramètre “MyStringSetting”  dans votre code, utilisez la méthode “GetSettingValue” :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.WriteInfo("My String = {0}", PackageHost.GetSettingValue("MyStringSetting"));</pre><p></p>
<p>La méthode “GetSettingValue” renvoie la valeur d’un setting de type “string” mais vous pouvez également caster la valeur depuis cette méthode en utilisant sa forme générique :</p>
<p></p><pre class="crayon-plain-tag">int myIntSetting = PackageHost.GetSettingValue&lt;int&gt;("MyIntSetting");
bool myBoolSetting = PackageHost.GetSettingValue&lt;bool&gt;("MyBoolSetting");</pre><p></p>
<p>Si par contre vous avez un modèle de configuration plus compliqué qu’une série de clé/valeur vous pouvez utiliser les “Setting Contents” pour définir du XML ou JSON comme valeur de setting.</p>
<p>Par exemple la configuration de votre package peut définir deux autres settings, contenant du XML ou JSON de cette façon :</p>
<p></p><pre class="crayon-plain-tag">&lt;setting key="MyXmlDocument"&gt;
  &lt;content&gt;
    &lt;note date="09-02-2016"&gt;
      &lt;to&gt;Tove&lt;/to&gt;
      &lt;from&gt;Jani&lt;/from&gt;
      &lt;heading&gt;Reminder&lt;/heading&gt;
      &lt;body&gt;Don't forget me this weekend!&lt;/body&gt;
    &lt;/note&gt;
  &lt;/content&gt;
&lt;/setting&gt;

&lt;setting key="MyJsonObject"&gt;
  &lt;content&gt;
    &lt;![CDATA[
    {
      "Number": 123,
      "String" : "This is a test (local)",
      "Boolean": true
    }
    ]]&gt;
  &lt;/content&gt;
&lt;/setting&gt;</pre><p></p>
<p>Plusieurs méthodes pour récupérer ces settings :</p>
<ul>
<li><u>GetSettingValue</u> : vous pouvez toujours récupérer le contenu brute de votre setting sous forme d’un string</li>
<li><u>GetSettingAsJsonObject</u> : dé-sérialise le contenu JSON de votre setting et vous retourne un objet dynamique</li>
<li><u>GetSettingAsJsonObject&lt;T&gt;</u> : dé-sérialise le contenu JSON de votre setting et le convertie dans un objet de votre type (T)</li>
<li><u>GetSettingAsXmlDocument</u> : dé-sérialise le contenu XML de votre setting et vous retourne un XmlDocument</li>
<li><u>GetSettingAsConfigurationSection&lt;TConfigurationSection&gt;</u> : dé-sérialise le contenu XML de votre setting sous forme d’un ConfigurationSection .NET</li>
</ul>
<p>Par exemple, pour manipuler le setting XML on pourrait écrire :</p>
<p></p><pre class="crayon-plain-tag">var xml = PackageHost.GetSettingAsXmlDocument("MyXmlDocument");
PackageHost.WriteInfo("My XmlDocument Attribute = {0} , first node value = {1}", xml.ChildNodes[0].Attributes["date"].Value, xml.ChildNodes[0].FirstChild.InnerText);</pre><p></p>
<p>Autre exemple avec le setting JSON :</p>
<p></p><pre class="crayon-plain-tag">dynamic json = PackageHost.GetSettingAsJsonObject("MyJsonObject");
PackageHost.WriteInfo("My JsonObject String={0}, Int={1}, Boolean={2}", json.String, json.Number, json.Boolean);</pre><p></p>
<p>Les settings d’un package sont déclarés au niveau du serveur dans la déclaration du package et/ou dans le fichier App.config.</p>
<p>Tous les settings doivent être déclarés dans le manifeste du package (fichier PackageInfo.xml).</p>
<p>Retrouvez plus d’information sur les settings <a href="/client-api/net-package-api/les-settings/">dans cet article</a>.</p>
<h3>Publier des StateObjects</h3>
<p>Pour publier (Push) un StateObject dans Constellation vous devez invoquer la méthode “<em>PackageHost.PushStateObject</em>” en précisant obligatoirement le nom du StateObject et sa valeur.</p>
<p>Par exemple, vous pouvez publié n’importe quel type de base :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.PushStateObject("MyString", "OK");
PackageHost.PushStateObject("MyNumber", 123);
PackageHost.PushStateObject("MyDecimal", 123.12);
PackageHost.PushStateObject("MyBoolean", true);</pre><p></p>
<p>Pouvez également publié des objets anonymes :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.PushStateObject("AnonymousObject", new { String = "test", Number = 123 });</pre><p></p>
<p>Ou encore avec des types plus complexes :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.PushStateObject&lt;MyCustomObject&gt;("MyObject",  new MyCustomObject() { String = "test", Number = 123 });</pre><p></p>
<p>Vous avez également la possibilité de définir des paramètres optionnels comme les métadonnées de votre StateObject ou sa durée de vie.</p>
<p>Par exemple, le StateObject “ShortLife” a une durée de vie de 20 secondes après sa publication. Au delà il sera marqué comme expiré.</p>
<p></p><pre class="crayon-plain-tag">PackageHost.PushStateObject("ShortLife", "Expire in 20 secs !!!", lifetime: 20);</pre><p></p>
<p>Ici, on publie un StateObject “Salon” en lui associé les metadatas “Id” et “Zone”.</p>
<p></p><pre class="crayon-plain-tag">PackageHost.PushStateObject("Salon", monObjetZoneSalon, metadatas: new Dictionary&lt;string, object&gt; { { "Id", 42 }, { "Zone", "Salon" } });</pre><p></p>
<p>Sur les objets personnalisés il est recommande de décorer les classes de l’attribut [StateObject] si vous avez possibilité de modifier le code de la classe. Autrement, sur votre classe IPackage, ajoutez l’attribut [StateObjectKnownTypes] en définissant tous les types de StateObjects que vous serez amener à publier. Cela permet de décrire ces types dans la Constellation pour l’auto-description (utilisez entre autre par les générateurs de code).</p>
<p>Pour plus d’information sur <a href="/client-api/net-package-api/les-stateobjects/">les StateObjects dans l’API .NET cliquez ici</a>.</p>
<h3>Tester son package dans sa Constellation</h3>
<p>Pour tester nous allons créer un package qui push à intervalle régulier un StateObject.</p>
<p>Le code de notre Package sera :</p>
<p></p><pre class="crayon-plain-tag">public class Program : PackageBase
{
    static void Main(string[] args)
    {
        PackageHost.Start&lt;Program&gt;(args);
    }

    public override void OnStart()
    {
        PackageHost.WriteInfo("Package starting - IsRunning: {0} - IsConnected: {1}", PackageHost.IsRunning, PackageHost.IsConnected);
        PackageHost.WriteInfo("Je suis le package nommé {0} version {1}", PackageHost.PackageName, PackageHost.PackageVersion);

        while (PackageHost.IsRunning)
        {
            PackageHost.WriteInfo("Je push un long !");
            PackageHost.PushStateObject("DemoLong", DateTime.Now.Ticks);

            Thread.Sleep(PackageHost.GetSettingValue&lt;int&gt;("Interval"));
        }
    }
}</pre><p></p>
<p>Notre application console démarre bien le package au démarrage (Main) où le package est notre classe Program qui hérite de PackageBase (donc c’est un IPackage).</p>
<p>Au démarrage on écrit deux logs de type information qui indique notamment le nom du package, sa version, si il est démarré (IsRunning) et si il est connecté (IsConnected).</p>
<p>Ensuite on crée une boucle qui tournera tant que le package est démarré. A chaque itération on écrit un log, publie un StateObject avant de mettre le thread en pause avant la prochaine itération.</p>
<p>Le temps de pause est un setting de type “Int” que l’on a nommé “Interval”.</p>
<p>L’utilisateur pourra le configurer dans la configuration du package sur le serveur, mais pour être sûr d’avoir une valeur par défaut nous allons déclarer ce setting ainsi que sa valeur par default dans son manifest.</p>
<p>Editez le fichier PackageInfo.xml pour ajouter :</p>
<p></p><pre class="crayon-plain-tag">&lt;Setting name="Interval" type="Int32" defaultValue="5000" description="Interval en millisecondes" /&gt;</pre><p></p>
<p>Ainsi même si le setting n’est pas déclaré sur le serveur ni dans le App.config local,  cette valeur sera par défaut égale à 5 secondes.</p>
<p>Vous pouvez démarrer le projet en mode debug (“F5” ou bouton “Start”) mais bien entendu il ne sera pas connecté à Constellation.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-101.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Debug dans Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-78.png" alt="Debug dans Constellation" width="424" height="216" border="0" /></a></p>
<p>Pour débugger dans Constellation, vous trouverez une icone dans la toolbar (en en pressant Ctrl+Alt+F8) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-161.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Debug dans Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-138.png" alt="Debug dans Constellation" width="424" height="100" border="0" /></a></p>
<p>Vous pouvez également cliquez droit sur votre projet et dans le menu Constellation sélectionnez “Debug On Constellation” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-102.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Debug dans Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-79.png" alt="Debug dans Constellation" width="424" height="307" border="0" /></a></p>
<p align="left">Si vous n’avez pas encore configuré la Constellation utilisée pour le débogage, vous devriez voir une alerte vous invitant à configurer vos accès :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-103.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Enregistrement de la Constellation dans VS" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-80.png" alt="Enregistrement de la Constellation dans VS" width="424" height="205" border="0" /></a></p>
<p align="left">Cette fois ci, votre package tourne bien en étant connecté à votre Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-104.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Hello World Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-81.png" alt="Hello World Constellation" width="424" height="216" border="0" /></a></p>
<p align="left">Lancez maintenant votre Console Constellation, vous verrez en temps réel les logs de votre package.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-105.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Hello World Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-82.png" alt="Hello World Constellation" width="424" height="232" border="0" /></a></p>
<p align="left">Sur le StateObject Explorer, vous verrez également le StateObject “DemoLong” publié par le package “MonPremierPackage”.</p>
<p align="left">Notez que la sentinelle qui héberge le package est une sentinelle virtuelle nommée “Developer”.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-106.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="StateObject Explorer" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-83.png" alt="StateObject Explorer" width="424" height="140" border="0" /></a></p>
<p align="left">Vous pouvez cliquer sur “View” pour voir toutes les informations à propos de ce StateObject.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-107.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Visualisation des StateObjects" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-84.png" alt="Visualisation des StateObjects" width="227" height="244" border="0" /></a></p>
<p align="left">Pour finir, cliquez sur “Subscribe” pour vous abonner aux mises à jour.</p>
<h3 align="left">Publier son package dans Constellation</h3>
<p align="left">Nous voulons maintenant publier ce package et le déployer sur une des sentinelles de notre Constellation.</p>
<p align="left">Toujours dans la toolbar “Constellation”, cliquez sur “Publish Constellation package” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-162.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-139.png" alt="image" width="424" height="100" border="0" /></a></p>
<p align="left">Ou depuis le menu contextuel de votre projet, sélectionnez “Publish Constellation package” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-108.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Publier un package Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-85.png" alt="Publier un package Constellation" width="424" height="324" border="0" /></a></p>
<p align="left">Vous pouvez soit le publier en local puis l’uploader manuellement via la Console par exemple, soit le publier directement dans votre Constellation.</p>
<p align="left">Pour cela, sélectionnez “Upload on Constellation Server”.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-109.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Publier un package Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-86.png" alt="Publier un package Constellation" width="424" height="212" border="0" /></a></p>
<p align="left">Sélectionnez ensuite l’adresse de votre Constellation et cliquez sur “Publish”.</p>
<p align="left">Un message vous informera de la réussite de la publication. Dans le panneau “Ouput” de Visual Studio vous retrouvez également le détail de la publication :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-110.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Publier un package Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-87.png" alt="Publier un package Constellation" width="424" height="98" border="0" /></a></p>
<p align="left">Depuis la Console, sur la page “Package Repository” vous pourrez apercevoir votre package fraichement publié :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-111.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Package Repository" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-88.png" alt="Package Repository" width="424" height="153" border="0" /></a></p>
<p align="left">Pour le déployer, vous devez éditer la configuration de votre Constellation pour ajouter le package à une (ou plusieurs) sentinelle. Vous pouvez également redéfinir le setting “Interval” que nous exploitations dans notre package (bien que nous avons défini une valeur par défaut).</p>
<p></p><pre class="crayon-plain-tag">&lt;package name="MonPremierPackage" enable="true"&gt;
    &lt;settings&gt;
        &lt;setting key="Interval" value="2000" /&gt;
  &lt;/settings&gt;
&lt;/package&gt;</pre><p></p>
<p align="left">Vous pouvez éditer la configuration du serveur Constellation directement depuis Visual Studio en cloquant sur “Edit Constellation Server configuration” (depuis la toolbar ou via le menu contextuel).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-163.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-140.png" alt="image" width="424" height="100" border="0" /></a></p>
<p align="left">La configuration sera automatiquement téléchargée du serveur et ouverte dans Visual Studio :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-164.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Edition de la configuration depuis VS" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-141.png" alt="Edition de la configuration depuis VS" width="424" height="230" border="0" /></a></p>
<p align="left">L’avantage est de pouvoir profiter de la validation du schéma XML et de l&rsquo;IntelliSense de Visual Studio :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-165.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Intellisense" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-142.png" alt="Intellisense" width="420" height="163" border="0" /></a></p>
<p align="left">Dès que vous enregistrerez votre configuration, Visual Studio détectera les modifications et vous proposera d’uploader et de recharger la nouvelle configuration sur votre serveur Constellation :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-166.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Upload de la configuration" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-143.png" alt="Upload de la configuration" width="242" height="144" border="0" /></a></p>
<p align="left">Vous pouvez aussi éditer la configuration de votre Constellation depuis la Console. Après avoir ajouter votre package, cliquez sur “Save &amp; Deploy” (pour informer les sentinelles des nouveaux packages) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-115.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Edition de la configuration" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-92.png" alt="Edition de la configuration" width="424" height="233" border="0" /></a></p>
<p align="left">Vous pourrez alors voir dans les logs que le package est automatiquement téléchargé et déployé sur sa sentinelle et commence à pusher des StateObject toutes les 2 secondes comme nous l’avons indiqué dans sa configuration :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-113.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Console log temps réel" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-90.png" alt="Console log temps réel" width="424" height="207" border="0" /></a></p>
<p align="left">Sur la page “Packages” vous pouvez maintenant contrôler votre package, l’arrêter, le redémarrer ou le recharger (= déploiement d’une nouvelle version).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-114.png"><img class="colorbox-1287"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Contrôle des packages" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-91.png" alt="Contrôle des packages" width="424" height="126" border="0" /></a></p>
<h3 align="left">Next steps</h3>
<ul>
<li>
<div align="left">Les <a href="/client-api/net-package-api/les-bases-des-packages-net/">bases des packages .NET</a></div>
</li>
<li>
<div align="left"><a href="/client-api/net-package-api/settings/">Les Settings</a> : paramètres de configuration de vos packages</div>
</li>
<li>
<div align="left"><a href="/client-api/net-package-api/pushstateobject/">Publier des StateObjects</a></div>
</li>
<li>
<div align="left">Exposer vos méthodes dans Constellation grâce aux <a href="/client-api/net-package-api/messagecallbacks/">MessageCallbacks</a></div>
</li>
<li>
<div align="left"><a href="/client-api/net-package-api/envoyer-des-messages-invoquer-des-messagecallbacks/">Envoyer des messages &amp; Invoquer des méthodes</a></div>
</li>
<li>
<div align="left"><a href="/client-api/net-package-api/consommer-des-stateobjects/">Consommer des StateObjects</a></div>
</li>
<li>
<div align="left">Accéder au hub de contrôle depuis un package C# avec le <a href="/client-api/net-package-api/controlmanager/">ControlManager</a></div>
</li>
<li>
<div align="left">Créer des <a href="/client-api/net-package-api/packages-ui-wpf-winform/">Packages UI</a> en Winform ou WPF</div>
</li>
</ul>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-csharp/">Créez votre premier package Constellation en C#</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/getting-started/creez-votre-premier-package-constellation-en-csharp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Les bases des packages .NET</title>
		<link>https://developer.myconstellation.io/client-api/net-package-api/les-bases-des-packages-net/</link>
					<comments>https://developer.myconstellation.io/client-api/net-package-api/les-bases-des-packages-net/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Mon, 21 Mar 2016 13:21:31 +0000</pubDate>
				<category><![CDATA[.NET API]]></category>
		<category><![CDATA[Package]]></category>
		<category><![CDATA[PackageHost]]></category>
		<category><![CDATA[WriteLog]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=1522</guid>

					<description><![CDATA[<p>Fonctionnement de base Comme nous l’avons vu dans le tutoriel précèdent, un package est une application ! Il faut impérativement appeler la méthode “PackageHost.Start” au démarrage de l’application, c’est à dire dans la méthode “Main” autrement, ce n’est pas un</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/net-package-api/les-bases-des-packages-net/">Les bases des packages .NET</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3 align="left">Fonctionnement de base</h3>
<p align="left">Comme nous l’avons vu dans <a href="/getting-started/creez-votre-premier-package-constellation-en-csharp/">le tutoriel précèdent</a>, un package est une application !</p>
<p align="left">Il faut impérativement appeler la méthode “<em>PackageHost.Start</em>” au démarrage de l’application, c’est à dire dans la méthode “Main” autrement, ce n’est pas un package Constellation mais une simple application .NET !</p>
<p align="left">Lorsque vous appelez la méthode “<em>PackageHost.Start</em>” vous devez impérativement transférer les arguments (args) et indiquer la classe de votre package (ici nommée “MonPackage”).</p>
<p></p><pre class="crayon-plain-tag">static void Main(string[] args)
{
    PackageHost.Start&lt;MonPackage&gt;(args);
}</pre><p></p>
<p align="left">La classe d’un package doit être une classe qui implémente l’interface “<em><u>IPackage</u></em>”. Cette interface définit trois méthodes :</p>
<ul>
<li>
<div align="left"><u>OnStart</u> qui sera invoqué lorsque le package a démarré</div>
</li>
<li>
<div align="left"><u>OnPreShutdown</u> : invoqué lorsque le package va s’arrêter (à ce stade votre package est toujours connecté à Constellation, vous pouvez encore pusher des StateObjects, envoyer des messages, écrire des logs sur le hub, etc..)</div>
</li>
<li>
<div align="left"><u>OnShutdown</u> : invoqué après le OnPreShutdown et après avoir fermé les connexions (plus aucune interaction avec la Constellation possible)</div>
</li>
</ul>
<p>Pour vous éviter de devoir implémenter ces trois méthodes, votre classe peut hériter de la classe “<em>PackageBase</em>”. Cette classe abstraite implémente l’interface <u>IPackage</u> dans des méthodes virtuelles vides.</p>
<p>Libre à vous d’implémenter les méthodes que vous souhaitez !</p>
<p></p><pre class="crayon-plain-tag">public class MonPackage : PackageBase
{
    //public override void OnStart()
    //{
    //}

    //public override void OnPreShutdown()
    //{
    //}

    //public override void OnShutdown()
    //{
    //}
}</pre><p></p>
<h3>Ecrire des logs</h3>
<p>Pour écrire des logs depuis un package Constellation vous disposez des méthodes suivantes :</p>
<ul>
<li>PackageHost.WriteDebug</li>
<li>PackageHost.WriteInfo</li>
<li>PackageHost.WriteWarn</li>
<li>PackageHost.WriteError</li>
</ul>
<p>Chacune de ces méthodes écrivent un message qui peut être formaté avec des arguments à la manière d’un “string.Format” :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.WriteInfo("Je suis le package nommé {0} version {1}", PackageHost.PackageName, PackageHost.PackageVersion);</pre><p></p>
<p><u>Attention</u> : bien respecter les index dans le format de votre message sous peine d’avoir une erreur.</p>
<p>Pour éviter cela, vous pouvez depuis C# 6.0 (intégré nativement depuis Visual Studio 2015), utiliser les « <a href="https://msdn.microsoft.com/fr-fr/library/dn961160.aspx?f=255&amp;MSPPError=-2147217396">chaines interpolée</a> » en plaçant en début de chaine un « $ » afin de pouvoir placer les arguments directement dans la chaine :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.WriteInfo($"Je suis le package nommé {PackageHost.PackageName} version {PackageHost.PackageVersion}");</pre><p></p>
<p><u>Note</u> : la méthode WriteDebug écrit seulement dans la console (mode debug local). Les logs de type “Debug” ne sont jamais envoyés dans la Constellation.</p>
<h3>Propriétés du PackageHost</h3>
<p>La classe centrale “PackageHost” expose différentes propriétés pour votre package Constellation.</p>
<h4>PackageHost.IsRunning</h4>
<p>Il s’agit d’un booléen qui indique si votre package est démarré. Il est affecté à “true” juste avant le OnStart et passe à “false” juste avant le OnPreShutdown.</p>
<p>Cela vous permet de connaitre l’état de votre package et sert notamment pour interrompre des boucles :</p>
<p></p><pre class="crayon-plain-tag">while (PackageHost.IsRunning)
{
    // Do job
}</pre><p></p>
<h4>PackageHost.IsStandAlone</h4>
<p>Cette propriété vous indique si votre package est démarré en “stand-alone”, c’est à dire lancé manuellement (en lançant le EXE) ou via Visual Studio (Debug on Constellation).</p>
<p>Si le package est démarré depuis une sentinelle Constellation, cette propriété est à “false”.</p>
<h4>PackageHost.IsConnected</h4>
<p>Vous indiques si le package est connecté ou non à la Constellation.</p>
<h4>PackageHost.ConstellationHub</h4>
<p>Retourne le proxy SignalR du hub Constellation.</p>
<h4>PackageHost.HasControlManager</h4>
<p>Indique si le package est connecté au hub de contrôle.</p>
<h4>PackageHost.ControlManager</h4>
<p>Retourne le client du hub de contrôle permettant de contrôler la Constellation. (<a href="/client-api/net-package-api/controlmanager/">plus d’information</a>)</p>
<p>Cette propriété est nulle si votre package ne demande pas de connexion au hub de contrôle. Vous devez donc tester si le client est disponible ou non avec la propriété ci-dessus :</p>
<p></p><pre class="crayon-plain-tag">if (PackageHost.HasControlManager)
{
     PackageHost.ControlManager.xxxx();
}</pre><p></p>
<h4>PackageHost.Package</h4>
<p>Retourne l’instance de votre package.</p>
<h4>PackageHost.PackageDescriptor</h4>
<p>Retourne l’instance du PackageDescriptor qui contient la description de vos MessagesCallbacks et StateObjects.</p>
<h4>PackageHost.PackageName</h4>
<p>Retourne le nom du package.</p>
<p>Le nom du package est défini dans le manifeste du package (PackageInfo.xml). Si aucune valeur n’est trouvée, le nom du package est le nom de l’assembly .NET du package.</p>
<h4>PackageHost.PackageInstanceName</h4>
<p>Retourne le nom de l’instance du package, c’est à dire le nom défini sur le serveur.</p>
<p>Un même package peut avoir plusieurs instances sur une même sentinelle mais avec des noms de package différents.</p>
<h4>PackageHost.SentinelName</h4>
<p>Retourne le nom de la sentinelle qui a démarré le package (si IsStandAlone = false).</p>
<p>Cette propriété est nulle si le package est démarré manuellement (en lançant le EXE) ou égale à “Developer” si lancé depuis Visual Studio.</p>
<h4>PackageHost.PackageVersion</h4>
<p>Retourne le numéro de version du package tel que défini dans le manifeste du package. Si il n’y a pas de manifeste, elle retourne le “PackageAssemblyVersion”.</p>
<h4>PackageHost.PackageAssemblyVersion</h4>
<p>Retourne le numéro de version de l’assembly du package.</p>
<h4>PackageHost.ConstellationClientVersion</h4>
<p>Retourne le numéro de version de la librairie Constellation utilisée par le package.</p>
<h4>PackageHost.PackageManifest</h4>
<p>Retourne le manifeste du package. (<a href="/concepts/package-manifest/">plus d’information</a>)</p>
<h4>PackageHost.Settings</h4>
<p>Retourne les settings du packages. (<a href="/client-api/net-package-api/settings/">plus d’information</a>)</p>
<h3>Connexion à Constellation</h3>
<p>Pour savoir si votre package est connecté à Constellation, vous pouvez interroger la propriété “PackageHost.IsConnected” comme indiqué ci-dessus.</p>
<p>Vous avez également l’évènement “ConnectionStateChanged” qui se déclenche lorsque le statut de la connexion change :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.ConnectionStateChanged += (s, e) =&gt;
{
    if (PackageHost.IsConnected)
    {
        // Récupération de la connexion
        // TODO : MAJ des états ?
    }
    else
    {
        // Perte de la connexion
    }
};</pre><p></p>
<p>Notez que lors de la première connexion cet événement n’est pas levé car Constellation n’a pas encore invoqué la méthode “OnStart” de votre package. Autrement dit le package se connecte d’abord puis “vous donnes la main”.</p>
<p>Donc si l’événement “ConnectionStateChanged“ est déclenché et que la propriété PackageHost.IsConnected = true, c’est qu’il s’agit forcement d’une reconnexion !</p>
<p>Dans ce cas, et en fonction de votre package, il est recommandé de “mettre à jour l’état” de votre package en re-pushant vos StateObjects.</p>
<p><u>Exemple :</u></p>
<p>Vous développez un package Constellation qui fait le lien vers votre système d’alarme.</p>
<p>Chaque zone de votre alarme est publiée dans Constellation sous forme de StateObject. Vous avez donc autant de StateObject que de zone et chacun de ces StateObjects indique l’état d&rsquo;une zone de l&rsquo;alarme (ouverte ou fermée).</p>
<p>Si pour une raison ou pour une autre, la connexion entre le package et la Constellation est rompue, l’activité sur les zones de l’alarme ne peut donc plus être mis à jours.</p>
<p>C’est pour cela que lorsque votre package parvient à se reconnecter il peut être nécessaire de republier tous les StateObjects sur Constellation pour être sûr d’avoir des StateObjects à jour par rapport à votre système d’alarme.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/client-api/net-package-api/les-bases-des-packages-net/">Les bases des packages .NET</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/client-api/net-package-api/les-bases-des-packages-net/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Migrer Constellation 1.7 vers Constellation 1.8</title>
		<link>https://developer.myconstellation.io/constellation-platform/constellation-server/migrer-constellation-1-7-vers-constellation-1-8/</link>
					<comments>https://developer.myconstellation.io/constellation-platform/constellation-server/migrer-constellation-1-7-vers-constellation-1-8/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Mon, 14 Mar 2016 09:37:21 +0000</pubDate>
				<category><![CDATA[Constellation Server]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[AccessKey]]></category>
		<category><![CDATA[PackageHost]]></category>
		<category><![CDATA[Sentinel]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Sentinel UI]]></category>
		<category><![CDATA[Console]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=1082</guid>

					<description><![CDATA[<p>Si vous avez une Constellation 1.7 déployée vous avez deux manière de migrer vers la 1.8 : Tout désinstaller et ré-installer la nouvelle installation Migrer l’existant Pour la première solution, il suffit simplement de tout désinstaller depuis l’ajout et suppression</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-server/migrer-constellation-1-7-vers-constellation-1-8/">Migrer Constellation 1.7 vers Constellation 1.8</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Si vous avez une Constellation 1.7 déployée vous avez deux manière de migrer vers la 1.8 :</p>
<ol>
<li>Tout désinstaller et ré-installer la nouvelle installation</li>
<li>Migrer l’existant</li>
</ol>
<p>Pour la première solution, il suffit simplement de tout désinstaller depuis l’ajout et suppression de programmes Windows  sans oublier de supprimer le répertoire du serveur. Puis en suivant le <a href="/getting-started/installer-constellation/">guide de démarrage</a>, réinstaller la nouvelle version 1.8 en partant de zéro.</p>
<p>Bien entendu cette solution n’est valable que si votre Constellation n’est pas ou peu utilisée. Autrement si souhaitez migrer l’existant vers la nouvelle version 1.8 suivez ce guide.</p>
<h3>Plan de migration</h3>
<p>Pour mettre à jour une Constellation 1.7 vers la 1.8, voici le plan des étapes à réaliser :</p>
<ol>
<li>Mise à jour du serveur</li>
<li>Mise à jour de la Console</li>
<li>Mise à jour des pages Web (ou assimilés) exploitants l’API JavaScript</li>
<li>Mise à jour du SDK</li>
<li>Mise à jour des sentinelles</li>
<li>Mise à jour des packages</li>
</ol>
<h3>Mise à jour du serveur</h3>
<p>La première étape consiste à mettre à jour le serveur de façon à migrer votre Constellation 1.7 en 1.8.</p>
<p>L’installeur tout-en-un “Platform” ou l’installeur propre au serveur réalise la migration automatiquement (en tenant compte de votre configuration actuelle).</p>
<p>Prenons l’exemple d’une installation avec le serveur Constellation 1.7.6 déployé, la Console (nommée “Control Center” dans la version 1.7) et une sentinelle 1.7 sur laquelle est déployé le package HWMonitor également en version 1.7 :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-23.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-22.png" alt="image" width="354" height="249" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-24.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-23.png" alt="image" width="354" height="249" border="0" /></a></p>
<p>Pour mettre à jour le serveur, la console et la sentinelle en une seule fois, je vous recommande de lancer l’installeur tout-en-un “Platform”.</p>
<p>L’installeur vous informera alors que ces trois composants seront mis à jour vers la version 1.8 :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-25.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-24.png" alt="image" width="354" height="275" border="0" /></a> <a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-26.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-25.png" alt="image" width="354" height="275" border="0" /></a></p>
<p align="left">A la fin de l’installation, dans les services Windows vous pourrez constater que les services du serveur et de la sentinelle ont bien été mis à jour :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-27.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-26.png" alt="image" width="424" height="64" border="0" /></a></p>
<p>Vous pouvez également vous rendre sur l’URI de votre Constellation pour vérifier que le serveur Constellation 1.8 est bien démarré.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-28.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-27.png" alt="image" width="424" height="219" border="0" /></a></p>
<p align="left">Notez que toute votre configuration est restée échangé (clé d’accès, sentinelle, configuration des  packages, etc…).</p>
<h3>Mise à jour de la Console</h3>
<p>Avec l’installeur “Platform” ci-dessus, la nouvelle Console (anciennement “Control Center”) est bien déployée.</p>
<p>Il vous suffit de réactualiser la page et vous retrouverez votre sentinelle (elle aussi migrée en 1.8 via l’installeur Plateform) et votre package HWMonitor (toujours fonctionnel dans votre nouvelle Constellation) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-29.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-28.png" alt="image" width="354" height="249" border="0" /></a><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-30.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-29.png" alt="image" width="354" height="249" border="0" /></a></p>
<h4 align="left">Activer la page de login et l’accès à l’API de Management</h4>
<p>Comme pour le serveur, l’installeur garde votre configuration actuelle lors de la mise à jour vers Constellation 1.8.</p>
<p>De ce fait, la configuration de la Console se trouve toujours dans le fichier “config.js” à la racine du répertoire d’installation de la Console.</p>
<p>Jusqu’à la version 1.7, ce fichier devait contenir une clé d’accès avec l’autorisation d’accès au hub de contrôle. Depuis la version 1.8, vous n’êtes plus obligé de définir en dur la clé d’accès dans ce fichier. Si la variable est vide, la console proposera alors une page de login.</p>
<p>L’idée est donc d’utiliser un couple login/password qu’on “hashera” pour l’utiliser en tant que clé d’accès (il est plus simple de mémoriser un login/password qu’une longue clé d’accès). Nous allons donc changer la clé d’accès (ou en créer une nouvelle) en utilisant ce procédé.</p>
<p>De plus dans Constellation 1.8, une nouvelle API est apparue pour l’administration du serveur : l’API de Management. Il vous faudra ajouter l’autorisation d’y accéder sur votre Access Key :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-31.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-30.png" alt="image" width="354" height="249" border="0" /></a></p>
<h5 align="left">Etape 1 : créez une Access Key à partir d’un login/password</h5>
<p align="left">Rendez-vous sur un outil de création de hash SHA1 tel que <a title="http://www.sha1.fr/" href="http://www.sha1.fr/">http://www.sha1.fr/</a> et créez un hash SHA1 du login concaténé avec votre mot de page.</p>
<p align="left">Par exemple, si mon login est “seb” et mon mot de passe “Password”, je crée le hash de “sebPassword” ce qui me retourne “567841343531a170817ac02941d644df12d7d3ae”.</p>
<h5 align="left">Etape 2 : déclarez votre nouveau credential</h5>
<p align="left">Editez le fichier de configuration du serveur (“Constellation.Server.exe.config” dans le répertoire d’installation du serveur) et ajoutez dans la section <em>&lt;credentials&gt;</em>:</p>
<p></p><pre class="crayon-plain-tag">&lt;credential name="MyAdminAccess" accessKey="567841343531a170817ac02941d644df12d7d3ae" enableControlHub="true" enableManagementAPI="true" enableDeveloperAccess="true"/&gt;</pre><p></p>
<p align="left">Le nom du credential n’a peu d’importance (il ne sert que pour votre organisation), l’AccessKey est le hash SHA1 généré à partir de notre login &amp; password, et n’oubliez pas d’autoriser l’accès au Control Hub (enableControlHub) et également à l’API de management (enableManagementAPI).</p>
<p align="left">SI vous souhaitez également utiliser cette clé d’accès pour débugger vos packages depuis le SDK Visual Studio, activez l’accès développeur (enableDeveloperAccess).</p>
<p align="left">Depuis la Console, cliquez sur le bouton “Reload Config” pour recharger la configuration avec votre nouveau credential :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-32.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-31.png" alt="image" width="354" height="160" border="0" /></a></p>
<h5 align="left">Etape 3 : mettez à jour le fichier de configuration de la Console</h5>
<p align="left">Editez maintenant le fichier de configuration de la Console (fichier “config.js” dans le répertoire d’installation de la config).</p>
<p align="left">Commencez par <strong>supprimer</strong> l’ajout de l’ancien menu en retirant les lignes :</p>
<p></p><pre class="crayon-plain-tag">$(document).one('pagebeforecreate', function() {
    $.get("menu.html", function(data) {
        $.mobile.pageContainer.prepend(data);
        $("#nav-panel").panel();
        $("#menu-list").listview();
    });
});</pre><p></p>
<p align="left">Puis <strong>effacer</strong> le contenu de la variable “constellationAccessKey” pour forcer l’affichage de la page de login.</p>
<p align="left">Au final, le contenu de votre fichier “config.js” doit être (en reprenant soin de spécifier l’URI de votre serveur Constellation en fonction de votre installation) :</p>
<p></p><pre class="crayon-plain-tag">// Constellation Server URI
var constellationUri = "http://localhost:8088";
// Constellation AccessKey (w/ enableControlHub)
var constellationAccessKey = ""; // leave empty to enable the login page</pre><p></p>
<p align="left">Vous pouvez ensuite rafraichir votre page (Ctrl+F5 de préférence), la page de login s’affichera car aucune clé d’accès n’est définie dans le fichier “config.js”.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-33.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-32.png" alt="image" width="354" height="249" border="0" /></a></p>
<p align="left">Pour vous connecter, utilisez votre login/password afin d’accéder à la console.</p>
<p align="left">SI vous avez activé l’accès à l’API de Management (enableManagementAPI), vous aurez un nouveau menu “Server Management” ajoutant des fonctionnalités pour la gestion du serveur, comme l’édition du fichier de configuration de serveur directement depuis la Console :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-34.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-33.png" alt="image" width="354" height="230" border="0" /></a></p>
<h4 align="left">Optionnel : auto-hébergement de la Console par le serveur Constellation</h4>
<p align="left">Depuis la version 1.8, le serveur Constellation est capable d’héberger des pages Web ce qui permet d’héberger la Console Constellation sans avoir besoin d’installer un serveur Web type IIS, Apache ou autre.</p>
<p align="left">Pour cela, vous devez simplement éditer la configuration du serveur pour activer le “File Server” :</p>
<p></p><pre class="crayon-plain-tag">&lt;fileServer enable="true" physicalPath="..\Console\" localhostOnly="true" path="/WebConsole"/&gt;</pre><p></p>
<p align="left">Passez l’attribut “enable” à true, indiquez le chemin physique du répertoire d’installation de la Console (par exemple : c:\inetpub\wwwroot), si vous voulez limiter ou non la console en local et l’URL relatif de la console (par default /webconsole/).</p>
<p align="left">Pour prendre en compte ces modifications vous devez redémarrer le serveur Constellation (dans la MMC des Services Windows).</p>
<p align="left">Aussi dans le fichier “config.js” de la Console, la variable “constellationUri” doit être vide pour indiquer que l’URI du serveur et la même que la console.</p>
<h3>Mise à jour des pages Web (ou assimilés) exploitants l’API JavaScript</h3>
<p>Depuis la version 1.8, plusieurs modifications ont été apporté au hub de contrôle et la 1.8 se voit doter d’un nouveau hub : le hub de consommation (Consumer Hub).</p>
<p>Historiquement le hub de contrôle (Control Hub) permettait à la fois de contrôler la Constellation mais également d’interroger les StateObjects, envoyer et recevoir des messages, etc… car c’était le seul hub disponible pour le Web (Javascript).</p>
<p>Avec Constellation 1.8, le hub de contrôle est exclusivement dédié au contrôle de la Constellation (gestion des packages, récupération des statuts, des logs, reload de la configuration, etc…). Toutes les méthodes liées aux messages et aux StateObjects ont été déplacé dans un nouveau hub : le hub de consommation.</p>
<p>Une fois votre serveur migré en 1.8, toutes les pages Web (ou assimilés type applications Tizen ou Cordova qui utilisent l’API Javascript) ne fonctionneront plus tant que vous n’aurez pas migrés les API Javascript 1.8</p>
<h4>Etape 1 : supprimez les anciennes librairies</h4>
<p>Tout d’abord, commencez par désinstaller les packages Nuget “Constellation.CommonJS” (API Constellation JS) et “Constellation.CommonNG” (API Constellation AngularJS) car il s’agit des anciens packages pour Constellation 1.7.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-35.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-34.png" alt="image" width="424" height="144" border="0" /></a></p>
<p align="left">Si vous n’avez pas utilisé Nuget pour installer ces librairies, supprimez manuellement les fichier “Constellation.js” et “ngConstellation.js”.</p>
<h4 align="left">Etape 2 :  installez les nouvelles librairies</h4>
<p align="left">Depuis Nuget, installez le ou les nouveaux packages :</p>
<ul>
<li>
<div align="left">“Constellation.Javascript” pour la libraire Constellation pour Javascript</div>
</li>
<li>
<div align="left">“Constellation.Angular” pour la librairie Constellation pour AngularJS (sur couche)</div>
</li>
</ul>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-36.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-35.png" alt="image" width="424" height="128" border="0" /></a></p>
<p align="left">Dans vos pages HTML, changez les liens vers les nouveaux fichiers Javascript portant désormais le numéro de version de l’API.</p>
<p>Remplacez :</p>
<p></p><pre class="crayon-plain-tag">&lt;script type="text/javascript" src="/constellation/Scripts/Constellation.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="/constellation/Scripts/ngConstellation.js"&gt;&lt;/script&gt;</pre><p></p>
<p>par :</p>
<p></p><pre class="crayon-plain-tag">&lt;script type="text/javascript" src="/constellation/Scripts/Constellation-1.8.0.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="/constellation/Scripts/ngConstellation-1.8.0.js"&gt;&lt;/script&gt;</pre><p></p>
<h4>Etape 3 : modification dans l’API</h4>
<p>Pour l’API Javascript (Constellaiton.Javascript), la méthode “<em>createConstellationClient</em>” est remplacée par “<em>createConstellationConsumer</em>” pour l’accès au hub de consommation ou “<em>createConstellationController</em>” pour l’accès au hub de contrôle.</p>
<p>Pour l’API AngularJS (Constellation.Angular), le module “<em>constellation</em>” à injecter dans votre contrôleur est remplacé par “<em>constellationConsumer</em>” et “<em>constellationController</em>” pour les deux hubs. La méthode “<em>intializeClient</em>” reste inchangée et est disponible sur les deux modules.</p>
<h3>Mise à jour du SDK</h3>
<p>Lancez tout simplement l’installeur tout en un “Platform” ou l’installeur du SDK.</p>
<p>Il procèdera à l’installation du VSIX pour Visual Studio 2012, 2013 et 2015.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-37.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-36.png" alt="image" width="424" height="330" border="0" /></a></p>
<h3>Mise à jour des sentinelles</h3>
<p>Les sentinelles 1.7 peuvent fonctionner sans aucun soucis dans une Constellation 1.8 (à l’inverse, une sentinelle 1.8 ne peut pas se connecter à une Constellation 1.7).</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-38.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-37.png" alt="image" width="424" height="244" border="0" /></a></p>
<p>Cependant, afin de bénéficier des nouveautés de la 1.8, il est conseillé de mettre à jour ses sentinelles.</p>
<p>Pour cela, vous devez soit lancer l’installeur “Plateform” si vous être sur la même machine que votre serveur Constellation, ou lancer l’installeur dédié à la sentinelle Service ou UI :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-39.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-38.png" alt="image" width="424" height="331" border="0" /></a></p>
<h3>Mise à jour des packages</h3>
<p>Comme nous l’avons vu avec les API Javascript, les requêtes (Request) et abonnements (Subscribe) sur les StateObjects et l’envoi et la réception de messages ne sont plus disponibles sur le hub de contrôle.</p>
<p>Ainsi les packages .NET ou Python qui utilisaient ces fonctionnalités comme les [StateObjectLink] ne pourront plus fonctionner une fois votre serveur Constellation migré en 1.8. Vous devez donc impérativement mettre à jour la librairie Constellation 1.8 pour ces packages.</p>
<p>Autrement, pour tous les packages Constellation 1.7.x qui n’exploitent pas les StateObjects (hormis le Push) et n’utilisent pas les fonctionnalités du hub de contrôle, pourront fonctionner sans problème sur une Constellation 1.8.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-40.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-39.png" alt="image" width="354" height="132" border="0" /></a></p>
<p align="left">Au démarrage vous aurez simplement un warning (et seulement si la sentinelle est en version 1.8.x) :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-41.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-40.png" alt="image" width="354" height="86" border="0" /></a></p>
<p align="left">Pensez toutefois à mettre à jour la libraire cliente Constellation pour bénéficier des nouveautés de la 1.8.</p>
<h4>Mise à jour du package Constellation 1.8</h4>
<p>Comme pour les API Javascript, le package NuGet de l’API .NET a changé d’identifiant. Vous devez donc commencer par désinstaller le package Constellation 1.7 nommé “Constellation.Common” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-42.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-41.png" alt="image" width="424" height="196" border="0" /></a></p>
<p>Puis, toujours depuis NuGet, installez le package “Constellation” 1.8 :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2016/03/image-43.png"><img class="colorbox-1082"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2016/03/image_thumb-42.png" alt="image" width="424" height="140" border="0" /></a></p>
<h4>Les breaking changes</h4>
<p>Une fois vos projets migrés sur la nouvelle librairie 1.8, il y a plusieurs “breaking changes” que vous devrez corriger pour pouvoir compiler votre package. Retrouvez ci-dessous la liste des changements bloquants (et non la liste des nouveautés de l’API 1.8).</p>
<h5>Le Namespace</h5>
<p>Premièrement l’espace de nom “<em>Constellation.Host</em>” devient “<em>Constellation.Package</em>”. Vous devez donc changer les différents “using” de votre code.</p>
<p></p><pre class="crayon-plain-tag">using Constellation.Package;</pre><p></p>
<h5>Le PackageManifest</h5>
<p>L’attribut « <em>RestoreStateObjects</em> » est renommé en « <em>RequestLastStateObjectsOnStart</em> » dans le manifest (PackageInfo.xml) de votre package. Il permet d’indiquer au serveur Constellation de vous envoyer les derniers StateObjects du package quand il démarre (avant la purge).</p>
<p>De même, l’évènement « <em>RestoreStateObjects</em> » est lui renommé en « <em>LastStateObjectsReceived</em> » sur la classe statique “<em>PackageHost</em>” :</p>
<p></p><pre class="crayon-plain-tag">PackageHost.LastStateObjectsReceived += (s, e) =&gt;
{
     PackageHost.WriteInfo("Recu {0} StateObject(s)", e.StateObjects.Count);
};</pre><p></p>
<h5>Les Settings</h5>
<p>La version 1.7 de Constellation a introduit les “SettingContents” permettant de mettre du XML dans la déclaration d’un setting. Il fallait alors utiliser la méthode « <em>GetSettingContent&lt;TConfigurationSection&gt;</em> » où TConfigurationSection devait être une ConfigurationSection.</p>
<p>En 1.8, cette méthode a été renommé en « <em>GetSettingAsConfigurationSection&lt;TConfigurationSection&gt;</em>« .</p>
<p>De plus de nouvelles méthodes sont apparues :</p>
<p></p><pre class="crayon-plain-tag">MaSection section = PackageHost.GetSettingAsConfigurationSection&lt;MaSection&gt;("MaSection");
dynamic configJson = PackageHost.GetSettingAsJsonObject("MonObjectJson");
MonObject objetJson = PackageHost.GetSettingAsJsonObject&lt;MonObject&gt;("MonObjectJson");
XmlDocument xml = PackageHost.GetSettingAsXmlDocument("MonXml");</pre><p></p>
<p>Lorsque le package est démarré en mode “debug”, depuis Visual Studio, les SettingValues sont lues depuis les &lt;appSettings&gt; de votre App.config. Avec la 1.8, les &lt;appSettings&gt; sont abandonnés. Vous devez définir une section “constellationSettings” qui prend la même structure que les settings sur le serveur avec le support des &lt;content&gt;.</p>
<p>Pour plus d’information, consultez la page dédiée à la <a href="#">configuration des packages</a>.</p>
<h5>Les StateObjects</h5>
<ul>
<li>Désormais la propriété “Metadatas” d’un StateObject est dictionnaire de String (clé) / Object (valeur) (et non plus String/String).</li>
<li>La classe  StateObject est maintenant dans le namespace racine “Constellation”</li>
<li>Les classes StateObjectNotifier et StateObjectCollectionNotifier ainsi que l’attribut StateObjectLink et les EventsArgs associés appartiennent au namespace “Constellation.Package”</li>
<li>Les notions  des StateObjectsLink &amp; Notifier (méthodes et events) sont déplacés dans le PackageHost et non plus dans le ControlManager.</li>
</ul>
<p>Il n’y a donc plus besoin de définir l’attribut “EnableControlHub” à true pour ajouter des StateObjectsLinks dans vos packages.</p>
<h5>Les messages</h5>
<p>La méthode <em>PackageHost.AttachMessageCallbacks</em> est renommée en <em>PackageHost.RegisterMessageCallback</em>. A noter qu’elle est (toujours) implicitement appelée au démarrage du package sur votre package “PackageBase”.</p>
<p>Les méthodes <em>PackageHost.CreateScope</em> &amp; <em>PackageHost.CreateSaga</em> ont été supprimées. Pour créer un scope vous devez directement utiliser la classe MessageScope.</p>
<p>Par exemple :</p>
<p></p><pre class="crayon-plain-tag">MessageScope scope = MessageScope.Create("MonPackageCible");
MessageScope scope2 = MessageScope.Create(MessageScope.ScopeType.Group, "GroupA", "GroupB");</pre><p></p>
<p><u>Breaking change</u> : ScopeType.Groups est devenu ScopeType.Group (au singulier)</p>
<p>Pour récupérer le proxy dynamic, vous devez utiliser la méthode d’extension “GetProxy” et non plus la propriété “Proxy” :</p>
<p></p><pre class="crayon-plain-tag">dynamic proxy = scope.GetProxy();</pre><p></p>
<p>Par exemple, pour envoyer le message “Demo” au package “DemoPackage” :</p>
<p></p><pre class="crayon-plain-tag">MessageScope.Create("DemoPackage").GetProxy().Demo("Un argument ici !");</pre><p></p>
<p>Pour envoyer ce message dans une saga, vous devez attacher à un callback de retour avec la méthode d’extension “OnSagaResponse” :</p>
<p></p><pre class="crayon-plain-tag">MessageScope.Create("DemoPackage").OnSagaResponse(reponse =&gt;
{
     PackageHost.WriteInfo("Recu reponse de {0}", MessageContext.Current.Sender.FriendlyName);
}).GetProxy().Demo("Un argument ici !");</pre><p></p>
<p>Par défaut, la variable de retour est un dynamic, mais vous pouvez aussi spécifier le type de retour :</p>
<p></p><pre class="crayon-plain-tag">MessageScope.Create("DemoPackage").OnSagaResponse&lt;MonObject&gt;(reponse =&gt;
{
     // Reponse est de type MonObject
     PackageHost.WriteInfo("Recu reponse de {0}", MessageContext.Current.Sender.FriendlyName);
}).GetProxy().Demo("Un argument ici !");</pre><p></p>
<p>Pour finir, il ne s’agit pas d’un breaking change mais d’une nouveauté : vous pouvez également envoyer un message dans une saga de façon “awaitable” :</p>
<p></p><pre class="crayon-plain-tag">Task&lt;dynamic&gt; reponse = MessageScope.Create("DemoPackage").GetProxy().Demo&lt;MonObject&gt;("Un argument ici !");</pre><p></p>
<p>Retrouvez plus d’information sur <a href="#">l’envoi de message et les sagas sur cette page</a>.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/constellation-platform/constellation-server/migrer-constellation-1-7-vers-constellation-1-8/">Migrer Constellation 1.7 vers Constellation 1.8</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/constellation-platform/constellation-server/migrer-constellation-1-7-vers-constellation-1-8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Mise en cache de page à l’aide de Disk: Enhanced 

Served from: developer.myconstellation.io @ 2026-01-23 01:55:03 by W3 Total Cache
-->