Le développement client-serveur moderne selon Microsoft

Le développement client-serveur préconisé par Microsoft, reste une valeur fiable ! Cette chronique peut vous aider à comprendre les mécanismes mis en jeu : la technologie se nomme Windows Communication Foundation (WCF).

Lors du lancement de Vista en 2006, Microsoft a sorti 3 technologies majeures : WPF (Windows Presentation Foundation), WWF (Windows Workflow Foundation) et WCF (Windows Communication Foundation). WCF permet aux entreprises de réaliser des applications client-serveur. La précédente technologie,  .NET Remoting,  offrait la possibilité de faire communiquer des clients et un serveur. WCF permet d’ajouter les technologies WEB comme WS-* sur une solution Microsoft.

Comment définir plusieurs configurations afin de mettre en œuvre les WS-* ? Premièrement, établir  le contrat d’échanges entre les différentes parties. Deuxièmement, définir les messages à échanger et troisièmement créer les protocoles mis en œuvre. Le serveur peut être implémenté sous forme de Host à coder manuellement ou bien être mis à disposition sur le serveur web de Microsoft Internet Information Server (IIS) et ainsi tirer parti d’une infrastructure web existante. Vous pouvez préciser votre sélection (http ou https), gérer des certificats, définir une sécurité au niveau Message ou au niveau Transport, utiliser ou non l’authentification Kerberos et  choisir http ou tcp. Pour initier une conversation entre un client et un serveur, il faut inclure le module System.ServiceModel.dll dans votre projet.

La partie la plus complexe consiste à réaliser le fichier de configuration pour le client et le serveur. Dans le cadre d’un développement la partie serveur est souvent réalisée sous forme de service Windows ; ainsi, la boîte noire est démarrée et stoppée avec la procédure d’administration des services. Comme tout développement serveur, il ne faut pas tomber dans une exception sinon le service risque de se terminer brutalement. Pour plus de confort, les exceptions sont intégrées dans les méthodes du serveur et écrites dans des fichiers des historiques… Le code client est moins gênant s’il y a des exceptions mais il est important de tout capter!

Pour de nombreux développeurs, WCF permet de réaliser une architecture client-serveur à moindre coût.  Elle supporte les piliers de la sécurité Windows,  que le serveur soit hébergé dans IIS ou en service Windows. L’hébergement d’un service WCF dans IIS est certainement le moyen le plus rapide d’y arriver ! Il suffit de créer un fichier d’extension SVC qui contient un nom de service et un nom de module (dll). Le reste ? C’est IIS qui s’en charge. L’avantage de WCF est de masquer la complexité des échanges.

La technique de WCF force le développeur à définir des interfaces C# (ou VB.NET) et à appliquer sur chaque méthode de l’interface l’attribut [OperationContract]. Pour les classes de données qui transitent via WCF, il est nécessaire d’appliquer l’attribut [DataMember]. Une fois que le serveur aura implémenté l’interface, il faudra utiliser un outil disponible dans Visual Studio pour construire le fichier de configuration. Les attributs seront choisis dans une grille de propriétés et ainsi le serveur pourra être hosté dans l’outil WCFHost de l’IDE (Visual Studio). L’étape suivante consiste à réaliser le programme client en ajoutant des références de services et en indiquant l’adresse du serveur avec son bon protocole (ex : net.tcp://localhost:13001/BorneService/mex). Cette opération générera le code de connexion nécessaire (le proxy). Au niveau de l’architecture du code, il faudra respecter les règles suivantes : définir les interfaces et les classes de données dans un module de contrat (dll), écrire le code du service dans un module de service (dll) et le host dans une application console qui sera transformée en service Windows. Quelle simplicité ! Nous sommes très loin des années 1990/2000 où le client-serveur était réalisé en C/C++ en mettant en jeu le multi-threading qui rendait le code assez complexe. La technologie WCF est d’une puissance impressionnante.