Partager via


Comment : créer un contrat duplex

Cette rubrique décrit les étapes de base pour créer des méthodes qui utilisent un contrat duplex (bidirectionnel). Un contrat duplex autorise les clients et les serveurs à communiquer entre eux indépendamment de sorte que l'un puisse initier des appels à l'autre. Le contrat duplex est l'un de trois modèles de message disponibles aux services Windows Communication Foundation (WCF). Les deux autres modèles de message sont unidirectionnels et demande/réponse. Un contrat duplex se compose de deux contrats unidirectionnels entre le client et le serveur et ne requiert pas que les appels de méthode soient corrélés. Utilisez ce type de contrat lorsque votre service doit demander au client plus d'informations ou déclencher explicitement des événements sur le client. Pour plus d'informations sur la création d'une application cliente pour un contrat duplex, consultez Comment : accéder aux services ayant un contrat duplex. Pour obtenir un exemple fonctionnel, consultez Service Contract: Duplex.

Pour créer un contrat duplex

  1. Créez l'interface constitutive du côté serveur du contrat duplex.

  2. Appliquez la classe ServiceContractAttribute à l'interface.

  3. Déclarez les signatures de méthode dans l'interface.

  4. Appliquez la classe OperationContractAttribute à chaque signature de méthode qui doit faire partie du contrat public.

  5. Créez l'interface de rappel qui définit le jeu des opérations que le service peut appeler sur le client.

  6. Déclarez les signatures de méthode dans l'interface de rappel.

  7. Appliquez la classe OperationContractAttribute à chaque signature de méthode qui doit faire partie du contrat public.

  8. Liez les deux interfaces dans un contrat duplex en affectant à la propriété CallbackContract dans l'interface primaire le type de l'interface de rappel.

Pour appeler des méthodes sur le client

  1. Dans l'implémentation de service du contrat principal, déclarez une variable pour l'interface de rappel.

  2. Affectez à la variable la référence d'objet retournée par la méthode GetCallbackChannel de la classe OperationContext.

  3. Appelez les méthodes définies par l'interface de rappel.

Exemple

L'exemple de code suivant illustre la communication duplex. Le contrat du service contient des opérations de service pour avancer et reculer. Le contrat du client contient une opération de service pour indiquer sa position.

  • Appliquer les attributs ServiceContractAttribute et OperationContractAttribute permet la génération automatique de définitions de contrat de service dans WSDL (Web Services Description Language).
  • Utilisez le ServiceModel Metadata Utility Tool (Svcutil.exe) pour récupérer le document WSDL et (éventuellement) le code et la configuration pour un client.
  • Les points de terminaison qui exposent des services duplex doivent être sécurisés. Lorsqu'un service reçoit un message duplex, il consulte l'élément ReplyTo dans ce message entrant afin de déterminer où envoyer la réponse. Si le canal n'est pas sécurisé, un client non fiable peut envoyer un message malveillant avec le ReplyTo d'un ordinateur cible, ce qui peut entraîner à un déni de service de l'ordinateur cible. Avec les messages de réponse/demande normaux, ce problème ne se pose pas, parce que le ReplyTo est ignoré et la réponse est envoyée sur le canal sur lequel le message d'origine est arrivé.

Voir aussi

Tâches

Comment : accéder aux services ayant un contrat duplex
Comment : définir un contrat de service Windows Communication Foundation

Référence

ServiceContractAttribute
OperationContractAttribute

Concepts

Conception et implémentation de services

Autres ressources

Service Contract: Duplex
Service Contract: Session