{Silverlight] Comment définir après déploiement l’adresse d’un endpoint WCF?

Par défaut

Le Silverlight, c’est une technologie vraiment cool, on peut faire à peu près ce qu’on veut mais parfois on se casse la tête sur des petites choses… Par exemple, comment faire pour modifier l’adresse d’un endpoint WCF? Car oui, ces informations sont inclues à la compilation dans le fichier XAP qui regroupe toute l’application Silverlight.

On a beau chercher, il n’y a plus de fichier de configuration de disponible pour modifier les adresses ip du/des serveur(s) WCF. C’est largement ennuyeux lorsque l’on doit débugger ou switcher à la demande l’adresse du service.

Pour résoudre ce problème, il suffit de regarder du coté du projet web qui héberge l’application Silverlight et plus particulièrement dans la balise object de la page ASPX. Il existe de nombreux paramètres que l’on peut transférer à l’application Silverlight dont la InitParams:

<param name= »InitParams » value= »url=http://localhost:12345/ » />

Je n’ai plus qu’à récupérer ce InitParams dans mon application Silverlight. Ce que je fais dans l’Application Startup:

private void Application_Startup(object sender, StartupEventArgs e)
{
  foreach (var item in e.InitParams)
  {
    switch (item.Key)
    {
       case "url":
         Singleton.Instance.URLParam = item.Value;
         break;
       default:
         break;
    }
  }
  this.RootVisual = new MainPage();
}

Ci-dessus, je place dans un singleton la chaine de l’URL passée via les initParams.  Il ne reste plus qu’à initialiser à la création d’un context WCF un endpoint avec la nouvelle adresse!

  public static MonServiceClient getService()
  {
     Uri uriSIC = new Uri(Singleton.Instance.URLParam + "Service_Exemple.svc?wsdl");
     var adrSIC = new EndpointAddress(uriSIC);
     var _SIC = new MonServiceClient("BindingExemple", adrSIC);
     return _SIC;
  }

Et voilà, il ne me reste plus qu’à utiliser cette instance de MonServiceClient afin d’accéder au WCF avec la bonne adresse!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

What is 7 + 13 ?
Please leave these two fields as-is:
IMPORTANT! Pour que ça marche, il faut répondre à la question (Comme ça je sais que ce n\'est pas un bot qui poste) :-)