| IntroductionWindows Communication Foundation (WCF) est le nom actuel du projet Indigo lancé par Microsoft. C’est un sous système permettant à des applications sur une ou plusieurs machines reliées par réseau de communiquer entre elles.Les application WCF peuvent etre développées dans tous les langages compatibles avec .Net.C’est une des quatre interfaces (WCF, WPF, WCS et WWF) qui composent le Framework .Net 3.0 distribué avec Windows Vista et Windows Server 2008 et compatible également par XP et windows 2003 server.
Le modèle WCF regroupe Web Services , .NET Remoting, Distributed Transactions, et Message Queues en un modèle de programmation orienté service pour les architectures distribuées. Cela est prévu de permettre un développement de web services plus rapide s’appuyant sur une API unique, que les communication soient au sein de la meme machine, sur un réseau local ou sur internet. |

|
WCF est exécuté dans une zone sécurisée (sandbox) et fournit le modèle de sécurité fourni par toutes les applications .Net.
WCF utilise des messages SOAP pour les communications entre processus.. Quand un processus WCF discute avec un processus non WCF, le langage XML est utilisé pour les messages SOAP. Pour les messages entre processus WCF, les messages SOAP sont encodés au format binaire.
Service WCF
Un service WCF est composé de trois parties
- Une classe “service” : qui implémente le service qui doit etre rendu
- un environnement hôte : pour hébérger ce service
- un ou plusieurs points finaux : auxquels les clients se connectent.
Toutes les communications se font au travers des point finaux. Chacun définit un contrat spécifiant quelles méthodes de la classe “service” sont accesibles par son biais. Chacun définit également le binding (l’attachement) comment un client communiquera avec le service le le host. L’hébergement des service peut se faire au travers de Windows Activation Services, de IIS.
Définir un Service WCF
Une classe de service WCF implémente plusieurs services par le biais de méthides. Par ailleurs, elle implémente au moins un contrat de service (service contract) dans lequel est défini les opérations qui peuvent etre exécutée par le service. Elle peut également (optionnellement) définir des contrats de données (data contracts) précisant quels jeux de données peuvent être accédés par les service.
Ces contrats sont défini en utilisant des attributs .Net. Toutes les classes exposée en tant que service WCF doivent être marquées avec l’attribut ServiceContract ou implémenter une interface marquée par cet attribut. Toutes les méthides qui peuvent être invoquées en utilisant des messages SOAP doivent etre marquées par l’attribut OperationContract. Ces attributs génèrent automatiquement des description WSDL pour les méthodes exposées qui peuvent alors être accédées par les clients.
Un service peut utiliser plusieurs contrats de services en utilisant plusieurs interface .Net (chacune marquée par son contrat de service). Une service de classe peut implémenter toutes les interfaces.
Ces deux attributs de contrats permettent également à un interface de faire référence à un ancien contrat, ce qui permet de supporter le versionning des interfaces.
Tous les contrats de services ont (explicitement ou non) un contrat de données qui définit sur que jeu de données les services peuvent travailler.Pour les types simples (in, double…) le contrat de données est géré automatiquement par WCF. Pour les types plus complexes (tableaux, struct…) ce contrat doit être défini explicitement. Ces contrats spécifient comment les données sont sérialisées et désérialisées (et donc la personnalisation de ces opérations). Ces contrats sont définis en utilisant l’attribut DataContract d’une classe ou d’une structure. Les membres des structures de données ainsi partagées devont etre marquées par l’attribut DataMember pour leur permettre d’être transférer entre le service et son client.
Le comportement (gestion de la concurrence d’accès, création de nouvelles instances du service…) du service et des opérations peut etre controlé en utiliasnt les attributs ServiceBehavior et OperationBehavior respectivement.
Définir les point finaux (endpoints)
Les clients se connectent au services WCF au niveau des points finaux. Tous les services exposent leurs contrats via un ou plusieurs poinnts finaux. Un point final est composé d’une adresse (une URL spécifiant ou le point peut etre accédé), et des propriétés de binding (attachement) qui spécifient comment les données peuvent être transmises, le protocole ainsi que les mécanismes de sécurité. WCF propose les protocoles standards (SOAP/HTTP, SOAP/TCP, SOAP/MQ…)
Communication with the service
Un client peut invoquer un service WCF en utilisant n’importe quel mécanisme RPC permettant de l’invoquer via un appel à une méthode. Tous les appels de services sont bloquant, c’est à dire que le client est figé en attandant que le service exécute sa requete. La requete doit être faite au travers d’un obhjet proxy, connecté au point final du service souhaité. Tous les appels adressés au proxy seront re-routé au service concerné et c’est également via le proxy que les réponses seront apportées au client. WCF gère la création du proxy, il extrait du point final la définition WSDL et créé le proxy de communication en utilisant le protocole spécifié dans le binding du point final. Il se charge également de la traduction du résultat dans le format attendu par le client.
WCF supporte les appels non bloquant en passant par des messages. Les proxy ne sont pas requis dans ce cas, et les réponses seront également sous forme de message. Le blocage dans ce cas ne durera que le temps nécéssaire à l’appel. Il faut pour cela implémeter des Message Queues gérant les files d’attentes. Cette gestion permet également de faire des appels à un service momentanément inactif (pour autant que la possibilité de gérer les réponses en différé soit implémenté au niveau du client)
(libre traduction et adaptation de wikipedia US)
Ces articles peuvent vous interesser