Partager via


Comment : créer un contrat demande-réponse

Cette rubrique décrit les étapes de base pour créer des méthodes qui utilisent un contrat demande-réponse. De telles méthodes appellent des opérations sur un service Windows Communication Foundation (WCF) et attendent une réponse. La réponse doit être envoyée et corrélée à la demande selon les termes de ce contrat. Même si la méthode retourne void, l'infrastructure crée et envoie un message vide pour indiquer à l'appelant que la méthode a été retournée. La seule façon pour annuler la création et la diffusion d'un message de réponse est d'utiliser un contrat unidirectionnel pour l'opération.

Pour plus d'informations sur comment spécifier des contrats d'opération, consultez la classe OperationContractAttribute et, notamment, la propriété IsOneWay.

Pour plus d'informations sur la création d'une application cliente pour un contrat duplex, consultez Comment : accéder aux services WCF avec des contrats unidirectionnels et demande-réponse.

Pour créer un contrat demande-réponse

  1. Créez le contrat de service en appliquant la classe ServiceContractAttribute à l'interface qui définit les méthodes que le service doit implémenter.

  2. Indiquez les méthodes qu'un client peut appeler dans l'interface en appliquant la classe OperationContractAttribute.

  3. La valeur de la propriété IsOneWay indique si une opération retourne un message de réponse. Si une opération a un contrat de demande-réponse, cette propriété a la valeur false. Si l'opération a un contrat unidirectionnel, la propriété a la valeur true. Toutes les opérations qui retiennent la classe OperationContractAttribute satisfont un contrat de demande-réponse par défaut parce que la propriété IsOneWay est par défaut false. Il est donc facultatif de spécifier explicitement la valeur false pour la propriété d'attribut.

Exemple

L'exemple suivant définit un contrat pour un service de calculatrice qui fournit des méthodes Add et Subtract. À l'aide de ce contrat, un client appelle les méthodes Add et Subtract et attend le retour, respectivement, de la somme et de la différence. La méthode Multiply ne fait pas partie du contrat car elle n'est pas marquée par la classe OperationContractAttribute et n'est pas, par conséquent, accessible aux clients.

using System.ServiceModel; 

[ServiceContract] 
public interface ICalculator 
{ 
[OperationContract] 
// It would be equivalent to write explicitly:
// [OperationContract(IsOneWay=false)] 
int Add(int a, int b); 

[OperationContract] 
int Subtract(int a, int b); 

int Multiply(int a, int b)
}
  • Le marquage d'une interface de contrat de service avec la classe ServiceContractAttribute et ses méthodes avec la classe OperationContractAttribute autorise la génération automatique de définitions de contrat de service dans WSDL (Web Services Description Language), les contacts clients et le code, une fois que le service est déployé.
  • Une définition extérieurement visible d'un contrat de service WCF peut être accédée une fois que le service est déployé sous forme d'un document WSDL standard spécifiant les opérations et leurs entrées et sorties respectives. Le WSDL est affiché en ajoutant la requête ?wsdl à l'adresse de base HTTP pour le service et en pointant le navigateur à l'URI (Uniform Resource Identifier) résultant.

Voir aussi

Tâches

Comment : créer un contrat duplex

Référence

OperationContractAttribute

Concepts

Conception de contrats de service