Nous avons déjà vu quelques généralités concernant les
WCF Services.
Pour passer à la pratique, je m'intéresse à l'exemple suivant :
http://msdn.microsoft.com/en-us/library/bb332338.aspx
Il s'agit de créer un Service Windows et d'y installer un WCF service, d'être capable de démarrer le Service Windows par programme, de créer un site web pour donner accès au WCF Service à "l'extérieur".
Vous y trouverez les codes sources à la rubrique
Download the sample code.
Requirements :
Plateforme de développement : Windows 2003 Server
Visual Studio 2010
.NET Framework 4.0
NDL : J'utilise indifféremment le verbe hoster qui n'existe pas en français ou le verbe héberger.
Structure du projet
Hosting and Consuming WCF Services :
|
Hosting and Consuming WCF Services Solution |
Cette solution est composée des projets suivants :
- ExchangeServiceIISHost : Site web d'hébergement du WCF Service
- ExchangeService : Le WCF Service lui même
- ExchangeServiceWindowsServiceHost : Le Service Windows qui hoste le WCF Service dans un Application Domain
- SimpleClientWithProxy : Une simple console qui va utilisé le WCF Service à travers le Site Web
- ExchangeServiceWindowsHostSetup : Projet d'installation permettant d'installer le service
Traduire la solution Visual Studio 2005 en Visual Studio 2010
C'est réalisé automatiquement sans souci en cliquant sur la solution : Practical.WCF.Chapter05.sln
La solution est ainsi traduite pour Visual Studio 2010.
Utiliser le .NET Framework 4.0 dans les projets de la solution
Afin de mettre à jour les références cassées des projets concernant les DLL :
System.Runtime.Serialization.dll
System.ServiceModel.dll
On utilise le framework 4.0 :
Bouton droit sur le projet -> Properties -> Application -> Target framework :
|
Modifier le Target Framework 4.0 |
Remplacer les références cassés par le références du .NET Framework 4.0 :
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Runtime.Serialization.dll
Et :
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.ServiceModel.dll
Dernière petite chose pour que la solution soit générée :
Dans :
\\WCF RIA Services\Hosting and Consuming WCF Services\ExchangeServiceIISHost\Web.config
Remplacez :
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
Par :
A ce stade votre solution doit se génèrer sans erreur.
Exécuter la Solution
Pour exécuter cette solution c'est à dire lancer la Console
SimpleClientWithProxy car c'est elle qui dans son Program.cs, instancie un objet proxy pour accéder au WCF Service :
TradeServiceClient proxy = new TradeServiceClient();
Afin de se brancher sur le WCF Service qui sera hosté par le Service Windows et sera mis à disposition des consommateurs par l'intermédiaire du site web, il faut encore :
- Installer le WCF Service dans un Service Windows
- Créer le site web
Installation du Service Windows qui hoste le WCF Service
Vous pouvez uiliser le projet d'installation
ExchangeServiceWindowsHostSetup pour installer votre Service Windows en cliquant sur le .msi dans :
\\WCF RIA Services\Hosting and Consuming WCF
Services\ExchangeServiceWindowsHostSetup\Debug\ExchangeServiceWindowsHostSetup.msi
Vous aurez alors un petit souci :
Il faut mettre à jour la Launch Conditions du projet d'installation avec le Framework 4.0 :
Bouton droit sur le projet ExchangeServiceWindowsHostSetup -> View -> Launch Conditions :
|
Projet d'installation mise à jour des Launch Conditions |
On voit que la version du Framework n'est pas à jour, choisissez le Framework 4.0 :
|
Projet d'installation, utiliser le framwork 4.0 |
Vous pouvez maintenant utiliser le projet d'install pour copier le Windows Service sur votre disque dur, il s'installe dans :
C:\Program Files\APress\QuickReturns ExchangeService Windows ServiceHost
En double cliquant sur l'install ExchangeServiceWindowsServiceHost.exe, j'obtiens le message suivant :
|
Installation du Service Windows, utiliser installutil.exe |
On va donc utiliser l'outil
installutil.exe du .NET Framework 4.0 pour installer notre Service Windows :
Ouvrir un fenêtre de command se placer dans le répertoire de installutil.exe :
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 et lancer la commande :
>installutil "C:\Program Files\APress\QuickReturns ExchangeService Windows
ServiceHost\ExchangeServiceWindowsServiceHost.exe"
Exécution de la commande d'installation du Service Windows qui hoste notre WCF Service :
|
Résultat de l'exécution de la commande installutil |
Vérifier l'installation du Service Windows :
Démarrer -> Outils d'administration -> Gestion de l'ordinateur
On voit apparaître notre service Windows :
QuickReturns Exchange Service :
|
Notre Service Windows est maintenant installé au sein de Windows |
S'il n'est pas déjà démarrer, vous devez démarrer le service. Regardez dans la colonne "Etat" du service.
Installation du Site Web ExchangeServiceIISHost
Il s'agit de mettre à disposition notre WCF Service qui est maintenant hosté par un Service Windows à travers un site web.
Dans le fichier App.config de notre console SimpleClientWithProxy on regarde le endpoint :
<endpoint address="http://localhost/ExchangeService/ExchangeService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITradeService"
contract="SimpleClientWithProxy.ExchangeService.ITradeService"
name="BasicHttpBinding_ITradeService"/>
Il s'agit donc de créer un répertoire virtuel dans IIS qui va pointer directement sur le site web :
\\WCF RIA Services\Hosting and Consuming WCF Services\ExchangeServiceIISHost
Démarrer -> Outils d'administration -> Gestion de l'ordinateur -> Gestionnaire des services internet (IIS) -> Site Web -> Site par défaut -> Bouton droit -> Nouveau -> Répertoire virtuel :
|
Création du répertoire virtuel "ExchangeService"qui pointe sur ExchangeServiceIISHost |
Configuration du site web :
|
Propriétés du répertoire virtuel |
N'oublions pas que l'on travaille avec le framework 4.0 :
|
Configuration du répertoire virtuel pour utiliser le framework 4.0 |
Exécution de la console SimpleClientWithProxy
Notre console va t-elle s'exécuter ?
Visual Studio -> SimpleClientWithProxy -> Bouton droit -> Set as startup project -> F5 Run.
Il traîne une ligne à mettre en commentaire dans :
\\WCF RIA Services\Hosting and Consuming WCF
Services\ExchangeServiceWindowsServiceHost\ExchangeWindowsService.cs
// BRY_26022013 System.Diagnostics.Debugger.Break();
ServiceHost host = new ServiceHost(typeof(TradeService));
N'oubliez pas de réinstaller le service en utilisant installutil avec l'option /u pour uninstall ...
Si vous n'avez pas correctement configuré votre site web, vous risquez encore d'obtenir l'erreur suivante :
|
Erreur de configuration du site web à l'exécution de la console |
Et sinon, vous devez obtenir le résultat suivant :
|
Exécution correcte de la console SimpleClientWithProxy |
ça fonctionne !
Conclusion
Certes l'exécution de la console n'est pas spectaculaire et pourtant elle met en oeuvre toute la chaîne d'exécution d'un WCF Service, hosté par un Service Windows installé dans les services de Windows et dont l'accès se fait par un Site Web installé derrière IIS 6.0.
Have fun !