OperationContractAttribute.AsyncPattern Propriété

Définition

Indique qu’une opération est implémentée de manière asynchrone à l’aide d’une Begin< paire méthodeName> et End<methodName> dans un contrat de service.

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

Valeur de propriété

Boolean

truesi methodNamemethod>Begin< est mis en correspondance par une<End méthode methodName> et peut être traité par l’infrastructure comme une opération implémentée comme une paire de méthodes asynchrone sur l’interface de service ; sinon, false. La valeur par défaut est false.

Exemples

L'exemple de code suivant présente un canal client à un contrat de service qui inclut à la fois une version synchrone de Add et une version asynchrone. Si l'interface de contrat est utilisée sur le client, l'opération BeginAdd et l'opération Add appellent une méthode sur le serveur qui peut ou peut ne pas être synchrone. Si le contrat est utilisé pour implémenter le service, la valeur par défaut est que les requêtes entrantes sont distribuées à la méthode synchrone.

[ServiceContract]  
public interface IAddTwoNumbers  
{  
    // If the asynchronous method pair  
    // appears on the client channel, the client can call   
    // them asynchronously to prevent blocking.  
    [OperationContract (AsyncPattern=true)]  
    IAsyncResult BeginAdd(int a, int b, AsyncCallback cb, AsyncState s);  

    [OperationContract]  
    int EndAdd(IAsyncResult r);  

    // This is a synchronous version of the BeginAdd/EndAdd pair.  
    // It appears in the client channel code by default.   
    [OperationContract]  
    int Add(int a, int b);  
   }  

Remarques

Utilisez la propriété AsyncPattern pour générer des opérations de service qui peuvent être appelées de façon asynchrone sur le serveur, le client ou les deux. La propriété AsyncPattern informe l'exécution qu'une méthode Begin a une méthode End correspondante qui se conforme au modèle de design de méthode asynchrone du .NET Framework. La génération de méthodes asynchrones de serveur qui implémentent une opération de service augmente l'évolutivité et les performances du serveur sans affecter les clients du service, et est recommandée lorsqu'une opération de service doit retourner quelque chose au client après avoir l'exécution d'une longue opération qui peut être exécutée de façon asynchrone.

Les clients restent non affectés car la paire de méthodes asynchrones sur le serveur est un détail d'implémentation qui n'affecte pas la description WSDL (Web Services Description Language) sous-jacente de l'opération. Ces méthodes apparaissent pour les clients comme une seule opération avec <input> et des messages corrélés <output> . WCF achemine automatiquement les messages entrants vers la Begin<methodName> méthode et achemine les résultats de l’appel End<methodName> vers le message sortant. Par conséquent, les canaux clients peuvent représenter la paire de méthodes en tant qu'opération synchrone unique ou comme une paire d'opérations asynchrones. Dans tous les cas, la représentation du client n'affecte en aucune façon l'implémentation asynchrone sur le serveur.

Les contrats de client peuvent utiliser la propriété AsyncPattern pour indiquer une paire de méthodes asynchrones que le client peut utiliser pour appeler l'opération de façon asynchrone. En règle générale, les applications clientes utilisent l’outil Utilitaire de métadonnées ServiceModel (Svcutil.exe) et l’option /async permettant de générer une End``Begin<methodName><methodName> paire de méthodes que le client peut utiliser pour appeler l’opération de manière asynchrone.

Notes

Si une opération de service a à la fois une version asynchrone et une version synchrone, le comportement par défaut sur le service est d’appeler la version synchrone.

S’applique à