Il est plus que courant qu’une application web ASP.NET ait à lire des paramètres de configuration depuis le fichier de configuration du site, web.config. Cette opération est très simple depuis une page ASPX par le biais de ConfigurationSettings.AppSettings. Ce scénario ne fonctionne cependant pas depuis une application Silverlight qui se voit systématiquement refusée l’accès à web.config.

La raison de cette impossibilité est que l’application Silverlight s’exécute sur le poste client. Le XAP, au même titre que le navigateur, ne peut accéder aux ressources réservées au serveur et en particulier à web.config ; il n’est par exemple par défaut pas possible à un client d’accéder au fichier de configuration par une URI de type http://www.mysite.com/web.config

Voici deux solutions possibles afin de permettre au XAP d’obtenir des paramètres de configuration dynamiques :

La première consiste à ne pas passer par web.config et mettre à disposition sur le même site un fichier de configuration que le XAP récupèrera comme n’importe quelle autre ressource réseau. Ce fichier devra ensuite être parsé et interprété par le XAP.

La seconde solution, souvent moins complexe à mettre en oeuvre, met à profit la classe ConfigurationSettings d’ASP.NET et passer les valeurs du fichier web.config par le biais de la propriété Silverlight.InitParameters. Le principe est le suivant :

1.      Dans la page ASPX, lire les valeurs souhaitées depuis web.config

<script runat="server">

    private void Page_Load()

    {

        var monSetting = ConfigurationSettings.AppSettings["monSetting"];

        mySlPart.InitParameters = string.Format("monSettingSilverlight={0}", monSetting);

    }

</script>

2.      Formater ces valeurs sous la forme "arg1=ma valeur,arg2=ma deuxieme valeur"

3.      Assigner la chaîne formatée précédemment à la propriété Silverlight.InitParameters

4.      Depuis Silverlight, accéder aux valeurs d’InitParameters depuis le handler d’Application.Startup et la propriété InitParams de son argument.

   if (e.InitParams.ContainsKey("monSettingSilverlight "))

      maVariable = e.InitParams["monSettingSilverlight "];

 

 

SlreadwebconfigFR

L’application attachée à ce post donne un exemple concret de passage de paramètre.

Un grand merci à Régis pour l’idée de ce post.