{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!

{C#] Comment sauvegarder un mail sur le disque au lieu de l’envoyer par SMTP?

Par défaut

Lors des développements, on est souvent confronté au problème du mail de validation client à envoyer… Seul problème, lorsque l’on se branche sur la base de production avec des vrais données, on ne veut surtout pas que les mails partent… La solution est d’intercepter le mail avant qu’il ne soit envoyé sur le serveur smtp… Il suffit pour ça de modifier le fichier de configuration de l’application:

<system.net>
  <mailSettings>
    <smtp deliveryMethod="SpecifiedPickupDirectory">
      <specifiedPickupDirectory pickupDirectoryLocation="C:\Temp"/>
    </smtp>
  </mailSettings>
</system.net>

Et voilà, dorénavant, les mails ne seront plus expédiés, mais sauvegardés dans C:/Temp. Pas besoin de modifier le code (SmtpClient ou MailMessage )