Tutoriel WCF Partie 2

microsoft

Cet article fait suite à l'article Tutoriel WCF Partie 1. Chaque WCF service a besoin d’être hébergé pour qu’il soit utilisable par les clients, il existe plusieurs types d’hébergement :

Self-Hosting, Windows Services Hosting , IIS Hosting.

1 - Self-Hosting 

  • C’est un hébergement manuel  via un projet qui se charge de lancer le service WCF , ça peut être un projet consol ou Projet Winforms , WPF …
    Je vais présenter par l’exemple comment effectuer ça.

Dans notre solution, on ajoute un nouveau projet de type console:

Wcf_Pres_Image4

 

  • J’ajoute la configuration du wcf et la connexion string dans le fichier app.config. Pour cela,  je déplace ces informations du projet WCFExampleLibrary, vers le projet console. Le but est de rendre WCFExampleLibrary utilisable pour d’autres projets.
  • Pour instancier le service j’ajoute la référence du projet WCFExampleLibrary à mon projet console, ainsi que la référence ServiceModel
  • Dans la méthode main de La classe Program , j’ajoute le code suivant :
using (ServiceHost host = new ServiceHost(typeof(ISchoolWcfServices)))
            {
                host.Open();
                Console.WriteLine("Service WCF est démaré :  " + DateTime.Now);
                Console.ReadLine();
            }

En rendant ce projet comme projet de démarrage,  l’exécution doit afficher quelque chose qui ressemble à ça :

Wcf_Pres_Image4_4

Test du service WCF :

Pour tester notre WCF services, j’utilise l’outil WCF Client Test qui se trouve dans le menu Tools de visual studio. Il faut laisser le service lancé pour  que cet outil le reconnaisse.

J’ajoute l’adresse du service

Wcf_Pres_Image5

Wcf_Pres_Image6

L’outils se charge de récupérer  le service WCF et la configuration nécessaire,

Wcf_Pres_Image7

Lorsque je lance mon premier test via le bouton Invoke , je reçois l’exception suivante :

Wcf_Pres_Image8

Pour régler ce problème, il suffit d’ajouter le la librairie EntityFrameWork.sqlServer.dll

Le résultat du notre test est le suivant :

Wcf_Pres_Image9

Remarque :

Wcf envoie des exceptions qui sont trompeuses. On peut avoir par exemple un problème de sérialisation de type et Wcf renvoie une exception problème de communication avec le protocole http. Donc pour bien trouver le vrai problème il faut tracer la communication du client server WCF.

Pour cela il suffit d’insérer le code suivant dans le fichier de config :

<!--pour tracer les erreurs--> 
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
      <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
      <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing">
        <listeners>
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" />
    </sharedListeners>
  </system.diagnostics>

 

Et la trace se trouve dans le fichier App_tracelog.svclog, qu’on peut le visualiser par l’outil trace viewer :

Wcf_Pres_Image10

Dans l'article suivant je vous présenterai la façon d'héberger un service WCF par un Windows Service.

 

Laisser un commentaire

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

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.