OperationContractAttribute.IsOneWay Propriété

Définition

Obtient ou définit une valeur qui indique si une opération retourne un message de réponse.

public:
 property bool IsOneWay { bool get(); void set(bool value); };
public bool IsOneWay { get; set; }
member this.IsOneWay : bool with get, set
Public Property IsOneWay As Boolean

Valeur de propriété

Boolean

true si cette méthode reçoit un message de demande et ne retourne aucun message de réponse ; sinon, false. La valeur par défaut est false.

Exemples

L'exemple suivant est un service qui implémente un contrat de service qui spécifie trois opérations. Deux des méthodes implémentent des opérations bidirectionnelles, qui retournent des messages de réponse sous-jacents à l'appelant, quelle que soit la valeur de retour. La troisième méthode implémente une opération qui reçoit un appel (un message entrant sous-jacent) mais ne retourne aucun message de réponse sous-jacent.

[ServiceContract]  
public class OneAndTwoWay  
{  
  // The client waits until a response message appears.  
  [OperationContract]  
  public int MethodOne (int x, out int y)  
  {  
    y = 34;  
    return 0;  
  }  

  // The client waits until an empty response message appears.  
  [OperationContract]  
  public void MethodTwo (int x)  
  {  
    return;  
  }  

  // The client returns as soon as an outbound message  
  // is queued for dispatch to the service; no response  
  // message is generated or sent.  
  [OperationContract(IsOneWay=true)]  
  public void MethodThree (int x)  
  {  
    return;  
  }  
}  

Remarques

Utilisez la propriété IsOneWay pour indiquer qu'une opération ne retourne aucun message de réponse. Ce type d'opération est utile pour les notifications ou la communication de style d'événement, notamment dans la communication bidirectionnelle. Sans attendre de message de réponse sous-jacent, les appelants d'opérations unidirectionnelles n'ont aucun moyen direct de détecter une défaillance au cours du traitement du message de demande. (Les applications de service qui utilisent des canaux fiables et des opérations unidirectionnelles peuvent détecter un échec de remise de message au niveau du canal. Pour plus d’informations, consultez Vue d’ensemble des sessions fiables.)

Dans les applications de services en duplex (ou bidirectionnels) dans lesquelles le client et le serveur communiquent indépendamment l'un avec l'autre, un canal client peut utiliser la propriété IsOneWay sur ses méthodes pour indiquer que le service peut effectuer des appels unidirectionnels au client que le client peut traiter en tant qu'événements. Aucun appel de retour ou message n'est généré étant donné que le service n'attend pas de message de réponse.

Si la propriété IsOneWay a la valeur false (valeur par défaut), même les méthodes qui retournent void génèrent un message de réponse. Dans ce cas, l'infrastructure crée et envoie un message vide pour indiquer à l'appelant que la méthode a été retournée. (L’utilisation de cette approche permet à l’infrastructure d’envoyer des erreurs SOAP au client.) La définition IsOneWay est true la seule façon d’annuler la création et la distribution d’un message de réponse.

Les méthodes unidirectionnelles ne doivent pas retourner de valeur ou avoir de paramètres ref ou out ; sinon, une exception System.InvalidOperationException est levée.

Spécifier qu'une opération est une opération unidirectionnelle signifie uniquement qu'il n'y a pas de message de réponse. Il est possible de bloquer si une connexion ne peut pas être établie, ou si le message sortant est très grand, ou si le service ne peut pas lire les informations entrantes assez rapidement. Si un client a besoin d'un appel non bloquant, générez des opérations AsyncPattern. Pour plus d’informations, consultez Services unidirectionnel et accès aux services à l’aide d’un client WCF.

S’applique à