Ce tutoriel explique pas à pas les différentes étapes de constructions d'un service WCF hébergé pas IIS.
Un second tutoriel est à disposition, ainsi que la source complète (service WCF + client) prise pour cette démo:
Bon service :)
Le service fournira les opérations suivantes pour notre application cliente que nous verrons dans le second tutoriel:
A présent, passons à la création de notre service WCF. Créer un nouveau projet de type « WCF Service Library ».
La structure d'un service WCF s'appuie sur deux types de contrats, un contrat de données et un contrat de service:
Maintenant que les présentations sont faîtes, nous allons définir notre seul contrat de données pour un objet MembreCS. Créons une classe MembreCS avec les membres le caractérisant comme ci-dessous.
// Objet représentant un membre de CodeS-SourceS [DataContract] public class MembreCS { //ID du membre [DataMember] public uint ID; //Nom du membre [DataMember] public string Nom; //Prénom du membre [DataMember] public string Prenom; //Pseudo du membre [DataMember] public string Pseudo; //Age du membre [DataMember] public uint Age; //URL du profil sur CodeS-SourceS [DataMember] public string Profile; //Membre normal ou admin [DataMember] public bool EstAdmin; }
Une fois le contrat de données définit sur notre objet MembreCS nous allons pouvoir écrire le contrat de service de notre service WCF. Créez une interface que vous appellerez IDemoWCFService avec les signatures des méthodes comme ci-dessous.
// Décrit les opérations exposées par le service [ServiceContract] public class IDemoWCFService { //Lister les membres [OperationContract] List<MembreCS> ListeMembres(); //Obtenir des informations sur un membre [OperationContract] MembreCS DetailsMembre(uint ID); //Supprimer un membre [OperationContract] bool SupprimerMembre(uint ID); //Pseudo du membre [OperationContract] public string Pseudo; //Créer un nouveau membre [OperationContract] bool NouveauMembre(uint ID, string nom, string prenom, string pseudo, uint age, string profile, bool admin); //Simple addition entre 2 nombres [OperationContract] int Addition(int nombre1, int nombre2); }
Après avoir spécifié la structure des données à notre service avec un Contrat de Données et définit les opérations qui seront exposées par le service à l'aide d'un Contrat de Service , la prochaine étape va être tout simplement d'écrire le code de nos méthodes exposées (opérations) en mettant en oeuvre le Contrat de Service (implémentation de l'interface IDemoWCFService).
Pour cela créons une nouvelle classe DemoService sous le contrat de service IDemoWCFService comme ci-dessous.
// Classe implémentant le contrat de service IDemoWCFService class DemoService : IDemoWCFService { public List<MembreCS> ListeMembres() { //Récupère la liste des membresCS return LibSerializer.DeserializeObjectFromXML<List<MembreCS>>(FICHIER_MEMBRES_CS); } public MembreCS DetailsMembre(uint ID) { MembreCS mCS = new MembreCS(); try { //Liste des membresCS List<MembreCS> lmCS = LibSerializer.DeserializeObjectFromXML<List<MembreCS>>(FICHIER_MEMBRES_CS); //Recherche le membreCS mCS = lmCS.Find(delegate(MembreCS m) {return m.ID == ID; }); } catch (Exception e) { throw new FaultException(ex.Message, new FaultCode("DetailsMembre")); } } }
Je passe sur les autres méthodes que vous retrouvez bien évidement dans la source associée à ce tutoriel...
Pour pouvoir exécuter le service WCF et le rendre accessible aux clients nous devons l'héberger soit dans une application dîtes Hôte, service Windows soit par IIS. Pour cette démonstration le service sera hébergé par IIS.
Ajouter un fichier de définition de service (. svc) qui va spécifier le nom de la classe que va exécuter IIS ainsi que le nom de l'assemblage qui renferme cette classe.
Créer un fichier « Web.config » en y ajoutant des informations dit de liaisons nécessaire à IIS. En effet ces informations vont indiquer comment un client doit communiquer avec le service WCF.
Déployer le service WCF vers IIS.
Et c'est parti, ajouter un nouvel élément de type Fichier texte portant le même nom que le service WCF « DemoWCFService »
Comme décrit dans la définition de la première étape nous allons spécifier le nom de la classe et de l'assemblage qui la renferme. Ajouter les lignes suivantes dans le fichier DemoWCFService.svc.
<%@ServiceHost Service="DemoWCFService.DemoService" %> <%@Assembly Name="DemoWCFService" %>
Passons maintenant à la seconde étape, le fichier Web.config.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="DemoWCFService.DemoService" behaviorConfiguration="DemoServiceBahavior"> <endpoint address=" " binding="basicHttpBinding" contract="DemoWCFService.IDemoWCFService" /> </service> <services> <behavior> <serviceBehaviors> <behavior name="DemoServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behavior> </system.serviceModel> </configuration>
Examinons ensemble la section <system.serviceModel> :
<!--Contient les informations de configuration d'un service WCF.--> <system.serviceModel> <!--Contient les détails de chaque service mis en oeuvre.--> <services> <!--Détail sur notre unique service.--> <!--Elément name: Spécifie l'espace de noms et la classe mettant en oeuvre notre unique service.--> < service name ="DemoWCFService.DemoService" behaviorConfiguration ="DemoServiceBehavior"> <!--Elément endpoint: Sans entrer dans les détails, il s'agit de l'élément qui fournit aux applis. clientes les infos dont elles ont besoin pour communiquer avec notre service DemoService.--> < endpoint address ="" binding ="basicHttpBinding" contract ="DemoWCFService.IDemoWCFService" /> </service> </services>
Dans la section <behavior > je vais activer la publication des métadonnées (du Contrat de Service) ce qui va permettre par la suite aux utilisateurs d'obtenir ces métadonnées en émettant une requête au service WCF de type HttpGet et ainsi retrouver un wsdl classique de WebService .
Il nous reste plus qu'à présent à déployer vers IIS notre service WCF (Je pars du principe que IIS est déjà activé et configuré) . Dans IIS ajouter un nouveau répertoire virtuel dans « Site Web par Défaut » et pointer le vers la racine de la solution du service WCF (Voir ci-dessous).
Le service est maintenant hébergé par IIS est prêt à être consommer par des applications clientes.
Dernière partie de ce tutoriel, le test de notre service WCF. Pour ce faire rien de plus simple, ouvrez votre navigateur Internet et saisissez l'adresse du service. http://localhost/DemoWCFService/DemoWCFService.svc
PS: http://localhost/DemoWCFService/DemoWCFService.svc?wsdl pour voir afficher les métadonnées du Contrat de Service.