Affichage des articles dont le libellé est WCF. Afficher tous les articles
Affichage des articles dont le libellé est WCF. Afficher tous les articles

WCF Services & Visual Studio 2015 Community

Cherchons à faire du WCF Services avec Visual Studio 2015 Community, est-ce que cela fonctionne ?

Je télécharge le code source :
https://msdn.microsoft.com/en-us/library/bb332338.aspx

J'ouvre la solution avec Visual Studio 2015 Community et j'obtiens l'erreur suivante :

WCF Services ne s'ouvre pas avec VS 2015 Community
Il se trouve qu'avec Visual Studio 2013 Professionnelle, j'obtiens la même erreur. On peut donc imaginer de continuer sans que cette erreur ne soit fatale. Une fois le projet traduit par VS 2013 Pro, l'ouverture avec VS 2015 Community affiche :

ExchangeServiceWindowsHostSetup est Non pris en charge
Cela signifie que le projet d'installation du WCF service ne fonctionne plus ... La stratégie de déploiement n'est plus la même, elle a changé d'avec VS 2010.  Pppfff ... Grrrr ...

Structure du projet

Le projet Hosting and Consuming WCF Services avec VS 2015 Community
On peut constater que ce n'est pas gagné ! Plein de choses vont devoir être corrigées avant d'arriver à une exécution du projet avec VS 2015 !

To Be Continued !

WCF Services et Authentification

Comment gérer l'authentification dans les WCF Services ?

Au delà de la gestion de l'authentification dans une application web (ASP.NET), il faut bien un mécanisme pour gérer l'authentification dans les Services WCF (ou services web). Un mécanisme qui permette à mon WCF Service de dire si l'application cliente qui tente d'accéder au Service est autorisée à le faire ou non. 

Qu'est ce qu'il existe sur ce sujet dans le .NET ?

Exemples de code source 

Il existe quelques exemples de code, on se dirigera d'abord vers MSDN de Microsoft :

How to: Specify Client Credentials for a Data Service Request (WCF Data Services)
By default, the client library does not supply credentials when sending a request to an OData service. However, you can specify that credentials be sent to authenticate requests to the data service by supplying a NetworkCredential for the Credentials property of the DataServiceContext.

http://msdn.microsoft.com/en-us/library/gg258445(v=vs.110).aspx

Un peu complexe, non ?

Au début il y avait  :

Authentication and Authorization in WCF Services - Part 1
http://msdn.microsoft.com/library/ff405740.aspx

Prise en main des outils WCF Services

Pour utiliser correctement ces exemples, il faut prendre en main les outils : Client Test WCF et l'éditeur de configuration WCF.

Dans Visual Studio 2013 :

Editeur de configuration des services WCF
On y accède également par clique droit sur le fichier App.config :

Configuration des Services WCF
Si vous configurez correctement vos services WCF au lancement de l'application vous aurez "Client Test WCF" qui se lancera :

Au démarrage de l'application web lancement de Client Tests WCF
Voilà la prise en main est assez complexe, vous devrez également supprimer et refaire les références de services, c'est le petit jeu habituel. Le code gérer issu de projets déjà existant ne fonctionne bien évidemment pas sur votre machine il faut donc supprimer et recommencer.

Autres exemples d'authentification dans les WCF Services

On trouve également dans le CodeProject :

Custom Authorization in WCF

http://www.codeproject.com/Articles/33872/Custom-Authorization-in-WCF

WF_WCF_Samples

Le must have d'MSDN !
http://www.microsoft.com/en-us/download/confirmation.aspx?id=21459

Je me demande bien pourquoi ils sont mélangés les exemples WCF et WF (Workflow Foundation) !?

On finira par écrire le code suivant :

private void logInButton_Click(object sender, EventArgs e)
{
  proxy = new SecureServiceClient("WSHttpBinding_ISecureService");

  proxy.ClientCredentials.UserName.UserName = nameTextBox.Text;
  proxy.ClientCredentials.UserName.Password = passwordTextBox.Text;
}

Bref tout ceci ne fonctionne pas très bien à croire qu'il y a peut d'intérêt à authentification les application.net dans les WCF Sercices ou bien une autre hypothèse : c'est très complexe à mettre en oeuvre.

Il faut tout simplement mettre en oeuvre une communication simple par double clef de cryptage et donc il n'y a pas de mécanisme autre que Crypto à utiliser.

WCF Services avec un jeton d'encryptage customisé

Une autre piste à parcourir, c'est en anglais et c'est Ici.

Mais on est pas loin d'une mécanisme spécifique ... Spécifier l'authentification dans les WCF Services ce serait par exemple l'échange d'un message avec un contenu qui pourrait déterminer si l'application cliente est authorisée à accéder aux WCF Services.

WCF Services - WCF Test Client - Problème

Je cherche à créer une application console qui hébergerait un WCF Service, parce que pour le développement il serait plus facile d'héberger mon service ainsi que de devoir à l'installer ailleurs.

Contexte du problème 

Je pars de l'exemple de Jason De Olivera :
http://www.jasondeoliveira.com/2009/07/tutorial-adonet-data-services-part-3.html
qui me semble parfait pour ce que je souhaite faire : une WCF Application Service et deux Consoles une pour le Client et une pour le Host :

WCF Service hosté dans une application console - Projet Visual Studio 2010
Je lance l'exécution du client :

WCF Service hosté dans un application console - Exécution
J'exécute la commande "EF" pour lire des données à partir du Modèle Entity Framework :

WCF Service lecture des données à partir du Modèle Entity d'Entity Framework
Mon service est en cours d'exécution, grâce aux ligne de code c# suivantes :
\030 - Tutorial ADO.NET Data Services\ADODataServiceLearning_Part4\Host\Program.cs
const string sURI = "http://localhost:37052/ExampleDataService.svc";
host = new DataServiceHost(typeof(ExampleDataService), new Uri[] { baseAddress });
host.Open();

Je pense légitimement que je vais pouvoir utiliser WCF Test Service pour tester le service, je lance donc un "Add Service..." :

Utilisation de WCF Test Service pour tester mon service hosté dans la console
Mais j'obtiens l'erreur suivante :

Erreur à la découverte de mon WCF Service hosté
En gros elle me dit :
Error: Cannot obtain Metadata from http://localhost:37052/ExampleDataService.svc
If this is a Windows (R) Communication Foundation service to which you have access, 
please check that you have enabled metadata publishing at the specified address.  
For help enabling metadata publishing, please refer to the MSDN documentation at 
http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error    URI: http://localhost:37052/ExampleDataService.svc    
Metadata contains a reference that cannot be resolved: 'http://localhost:37052/ExampleDataService.svc'.    
The remote server returned an unexpected response: (405) Method Not Allowed.    
The remote server returned an error: (405) Method Not Allowed.
HTTP GET Error    URI: http://localhost:37052/ExampleDataService.svc    
The document at the url http://localhost:37052/ExampleDataService.svc/ 
was not recognized as a known document type.
The error message from each known type may help you fix the problem:
- Report from 'XML Schema' is 'The root element of a W3C XML Schema should be <schema> 
  and its namespace should be 'http://www.w3.org/2001/XMLSchema'.'.
- Report from 'DISCO Document' is 'Discovery document at the URL 
  http://localhost:37052/ExampleDataService.svc/ could not be found.'.  
- The document format is not recognized.
- Report from 'WSDL Document' is 'There is an error in XML document (2, 2).'.  
- <service xmlns='http://www.w3.org/2007/app'> was not expected.

Solution au problème de WCF Test Client

Il faut utiliser l'outil Service Configuration Editor pour configurer le WCF Service : ExampleDataService.svc et créer le contenu des fichiers .config manquant dans la solution. Cette configuration des WCF Services doit être effectuée dans le ficher App.config de la Console qui hoste le service.

WCF Services - AspNetCompatibilityRequirements - Problème

Un petit souci que j'aimerais soulever. Il y a de nombreuse manipulations à effectuer pour créer véritablement une architecture de logiciel correctement fondée sur les WCF Services.

Contexte du problème 

J'ai une application qui utilise le modèle suivant :
J'ai créé un WCF Service :
  DataService.svc

Que je dérive d'une interface :

IDataService.cs

    [ServiceContract]
    public interface IDataService
    {
        [OperationContract]
        Data_Customer GetCustomer(int ID);
    }
    [DataContract]
    public class Data_Customer
    {
        [DataMember]
        public int CustomerID { get; set; }
        [DataMember]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
    }

Mon application fonctionne et puis je décide d'y ajouter un WCF Data Service :

WPF Using WCF Services
Mais à l'exécution de mon application, j'obtiens l'erreur suivante au moment d'appeler le service  :
WCF Service Error while addind WCF Data Service in solution
Voilà que maintenant, je suis amené à rajouter les lignes suivantes dans mon service pour qu'il fonctionne à nouveau :

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    using System.ServiceModel.Activation;
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class Service1 : IService1
    {

C'est un peu déroutant ...

Si l'on essaye de mettre à jour le Service Référence :

WCF Services - Mise à jour du Service Référence
On tombe sur une erreur d'un autre monde :

WCF Service Reference Updated
To Be Continued

Silverlight et Log4Net

La thématique de l'outil de traces est ancienne comme le monde des développeurs. Il faut toujours pouvoir tracer son programme et retirer ces traces au moment du déploiement.

Alors parmi tous les outils de traces mon regard se tourne vers Log4Net et puis-je l'utiliser avec Silverlight ?

Un bon tutoriel mais en anglais ici.

La page la plus intéressante sur ce sujet pour moi, se trouve ici. On y apprend que l'on ne pourra pas utiliser directement Log4Net avec Silverlight car aucune des builds n'est réalisée avec ce framework : Log4Net Supported Frameworks.

Qu'il est inutile de tenter de compiler les sources de Log4Net avec Silverlight, étant donné les restrictions de ce dernier, il n'est pas possible d'avoir accès au système de fichiers côté client et donc de créer un fichier de logs.

On y donne également le début d'une solution : Utiliser l'application ASP.NET qui host le .xap de Silverlight pour faire une référence à la DLL log4net. Vous n'avez plus qu'à développer un service web qui permettra à Silverlight d'utiliser Log4Net.

Voici donc le projet :
Une Business application for Silverlight 5.0
Une Asp.net application qui host le .xap et qui aura une référence sur la dll log4net.
Un WCF Service dans l'application asp.net que l'on va rendre utilisable depuis Silverlight.
Le tout pour faire des Logs dans un fichier texte.

Silverlight Business Application for Log4Net

Je créé une application Business pour Silverlight que je nomme BusinessApplicationLog4Net :

Silverlight Business Application BusinessApplicationLog4Net
Je créé une référence à la DLL log4Net que j'ai installée :


Référence à log4net dans mon projet BusinessApplicationLog4Net

ASP.NET Business Application and Log4Net afficher des traces

Installation d'un bouton et d'un TextBox dans l'application asp.net afin de faire des logs.

Dans la Silverlight Business Application, derrière la page BusinessApplicationLog4NetTestPage.aspx il n'y a pas de code behind, je souhaite pourtant faire des logs à partir d'un bouton de cette page. Je une nouevelle page BusinessApplicationLog4NetTestPage.aspx cette fois avec son code behing et je copie le cope nécessaire l'embarquement du .xap. Je peux ainsi ajouter mon bouton et déclencher du code derrière :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Collections;

// Here is the once-per-application setup information
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace BusinessApplicationLog4Net.Web
{
    public partial class BusinessApplicationLog4NetTestPage : System.Web.UI.Page
    {
        // Should be declared for each class
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        protected void Page_Load(object sender, EventArgs e)
        {
            log.Debug("Page Loaded");
        }

        private static int nbLogs = 0;

        protected void ButtonMakeLog_Click(object sender, EventArgs e)
        {
            log.Debug("ButtonMakeLog_Click");
            TextBoxLog.Text = "nbLog " + nbLogs.ToString();
            log.Debug(TextBoxLog.Text);
            nbLogs++;
        }
    }
}

Pour faire des logs il me faut encore trois choses :
le déclenchement d'une fonction d'assembly XmlConfigurator
la déclaration d'une variable log
l'appel à la fonction log que je fais depuis la page Page_Load

ASP.NET and Log4Net web.config

Remarque importante :
Je me suis égaré en lisant le tutoriel dans la création d'un fichier de configuration pour Log4Net à part : Log4Net.config mais cela ne fonctionnait pas.
Il faut avoir à l'esprit les limitations des applications asp.net qui sont sécurisées et mon application ne trouvait jamais le fichier Log4Net.config je pris donc le parti de configurer mon Log4Net dans le fichier Web.config

Pour les logs, je créé un répertoire Log auxquels je donne accès à "Tout le monde".
Et je lance mon application :

Silverlight Business Application for Log4Net
Et maintenant pour afficher mes logs, je tape l'url suivante :

http://localhost:52878/Log/log.txt

Et les logs s'affichent dans mon navigateur :

ASP.NET Business Application afficher les logs

WCF Service for Service references in RIA application

Pour que mon application Silverlight puisse elle aussi faire des logs avec Log4Net, je créé un WCF Service hosté par mon application ASP.NET que je nomme ServiceLogger :

WCF Service Logger
Je ne fais pas le détail du code, vous pourrez télécharger ce code source en bas de cet article.

Pour utiliser ce service dans mon application Siverlight il faut lui ajouter une Service Refrence :
Silverlight Application Add Service Reference
En suite je clique sur "Discover" pour découvrir les Services installés au sein de ma solution :


Pour découvrir les fonctionnalités de mon service, je clique sur ServiceLogger.svc et là je tombe sur l'erreur :

WCF Service Hosted by ASP.NET application - Error while attempting to find services
La solution détaillée de cette erreur se trouve Ici.

Une fois les lignes :

using System.ServiceModel.Activation;

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

Ajoutées dans mon services, et :
Remarque importante : La création de WCF Services comme bien d'autres objets entraîne du code généré afin de le mettre à jour ne pas hésiter à "Cleaner" la solution.

J'obtiens enfin mon ServiceReference que je nomme "ServiceLogger" :

Silverlight WCF Ria Services 

Silverlight make logs using Service References

Je rajoute un bouton et un textbox dans la page home de mon application Silverlight. 
Le code de mon bouton est le suivant :

        private int nbLogs = 0;

        private void buttonMakeLog_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            var log = new ServiceLogger.ServiceLoggerClient();
            log.LogMessageAsync("Click on button will produced log on server" + nbLogs.ToString());

            textBox.Text = "log " + nbLogs.ToString();
            nbLogs++;
        }

Je l'exécute et je joue un peu avec :

Silverlight utilise un Service Reference et Log4Net pour afficher des traces
Et j'affiche mes traces :

Grâce à Log4Net mon application Silverlight fait des traces dans ASP.NET

Conclusion

Oui c'est délicat de mettre en oeuvre l'ensemble de ces technologies surtout avec Silverlight et ASP.NET. Au début du projet, on ne peut pas être certain d'aboutir puis on trouve des astuces des contournements. En développant il faut bien garder à l'esprit les différentes limitations des applications Silverlight et ASP.NET en général c'est cela qui permet de trouver une solution.

Download Source Code

Requirements :
Visual Studio 2010
Silverlight 5.0
Log4Net

Download Source Code





WCF Services par la pratique

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 :
<configuration>

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 !


WCF Services Ressources

Voici des ressources utiles pour travailler avec Windows Communication Foundation c'est à dire les WCF Services.

Windows Communication Foundation

How to: Host a WCF Service in a Managed Application
http://msdn.microsoft.com/fr-fr/library/ms731758.aspx

Hosting and Consuming WCF Services
http://msdn.microsoft.com/en-us/library/bb332338.aspx#msdnwcfhc_topic3

L'adressage WCF en profondeur - Aaron Skonnard
http://msdn.microsoft.com/fr-fr/magazine/cc163412.aspx

Self-Hosted WCF Service
http://msdn.microsoft.com/fr-fr/library/ms750530.aspx

Exemples et documentation sur WCF

Getting Started :
http://msdn.microsoft.com/fr-fr/library/ms751519(v=vs.100).aspx

WCF and WF Samples
http://msdn.microsoft.com/fr-fr/library/dd483363(VS.100).aspx

Exemples Windows Communication Foundation (WCF)
http://msdn.microsoft.com/fr-fr/library/dd483346(v=vs.100).aspx

Download Samples

Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 :
http://www.microsoft.com/en-us/download/details.aspx?id=21459

Extra-Tools for WCF Services

WCF service configuration editor

Que vous trouverez dans les raccourcis du menu Démarrer avec l'installation du SDK pour Visual Studio 2010.

Il vous permet de créer, de réparer des fichiers .config liés aux WCF Services. Ce sont des opérations délicates qu'il est un peu plus facile de mener avec cet outil.

WCF service configuration editor

 WCF Test Client

Comme sont nom l'indique, il permet de tester les WCF Services que vous avez installé. Il se comporte comme un client WCF, vous l'abonnez à vos services installés. Lors du développement de vos WCF Services, s'ils ne fonctionnent pas avec cet outil ce n'est pas la peine d'aller plus loin. Cet outil permet également de détecter des erreurs sous d'autres formes que les exceptions au moment du Debug.

Sont existence est parfois évoquée dans certains exemples par contre il n'est pas facile à trouver car il se trouve dans le répertoire suivant :

C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\WcfTestClient.exe

Et pour les machines 64bits :

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\WcfTestClient.exe

Tools for WCF Services - WCF Test Client
Have Fun !

WCF Services Généralités

Personnellement, j'ai déjà utilisé les WCF Services, c'est l'évolution permettant une meilleur interopérabilité entre différentes applications c'est donc un élément clef de l'architecture logicielle. Je ne prends note ici que des points qui m'intéressent particulièrement.

Web Services, Service References, c'est forcément un peu confus, disons que les Web Services permettent la communication entre applications web tandis que les Service References possède plusieurs Endpoints permettant la communication entre applications hétérogènes.

Comprendre les Application Domains .NET

Du code managé peut être hosté par un Service Windows (Process). Le CLR isole le code managé en créant des partitions logiques séparées à l'intérieur du Service Windows que l'on appelle Application Domains. Un seul Process peut contenir plusieurs Application Domains. Chaque Domaine d'Application hoste des parties distinctes de code encapsulé dans des Assemblies.

Cette capacité d'un Service Windows de hoster des Application Domains possède plusieurs avantages :
  • Les Application Domains ont un impacte neutre sur le système d'exploitation et sur la plateforme .NET car elle créée une abstraction de la notion d'exécutable ou de librairie. 
  • Les Application Domains peuvent être contrôlées à loisir chargées et déchargées.
  • Les différents Application Domains qui existe au sein d'un Process sont indépendantes les unes des autres et reste fonctionnelle lorsque l'une se plante.

Hébergement d'un service WCF

WCF à besoin d'au moins un Domaine d'Application hosté dans un Service Windows.

Un service WCF peut être hébergé soit dans une application cliente, Console ou Winform ou Service Windows soit dans une application ASP.NET sur un serveur IIS dans ce cas on pourra utiliser les protocoles http/https pour communiquer avec le service.

Lors du choix du host certaine considérations sont à prendre en compte :
  • Disponibilité : Quand souhaitez vous que votre service soit joignable ?
  • Fiabilité : Que se passe t-il si votre service s'arrête, est ce que cela affecte les autres consommateurs ?
  • Versioning : Devez-vous supporter des versions différentes et anciennes de votre service ? Savez vous qui consomme votre service ?
  • Déploiement : Quel est votre modèle de déploiement ? Installez-vous avec un packages de déploiement d'installation de Microsoft et Visual studio, ou un xcopy est-il suffisant ?
  • État : Vos services sont-ils sans état ? Ou avez-vous besoin de l'état de session dans votre service ?
Remarque : Le modèle de programmation WCF est agnostique de l'endroit où il est en cours d'exécution, passer à un autre hôte est toujours possible plus tard, et cela signifie que vous n'aurez pas à modifier  votre implémentation de service. En règle générale, vous commencerez avec un scénario auto-hébergé dans une application console pour test-drive et prototyper vos services.

Service WCF qui se hoste lui même

Pour qu'un service se hoste lui-même deux choses sont nécessaires, le runtime WCF et une application .NET managée dans laquelle vous hébergée le ServiceHost et qui doit contenir le code pour démarrer et stopper le service.

Pour aller plus loin, je vous propose l'article suivant : WCF Services par la pratique

Vous pouvez également lire : WCF Services Ressources
Les ressources nécessaires pour travailler avec WCF.