OperationContractAttribute.AsyncPattern Proprietà

Definizione

Indica che un'operazione viene implementata in modo asincrono usando una Begin< coppia di metodiName e<End methodName>> in un contratto di servizio.

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

Valore della proprietà

Boolean

truese il Begin<metodoNamemethod> è corrispondente a un End< metodo methodName> e può essere considerato dall'infrastruttura come operazione implementata come coppia di metodi asincrona nell'interfaccia del servizio; in caso contrario, false. Il valore predefinito è false.

Esempio

Nell'esempio di codice seguente viene mostrato un canale client per un contratto di servizio che prevede sia una versione sincrona sia una versione asincrona di Add. Se l'interfaccia del contratto è utilizzata nel client, sia l'operazione BeginAdd sia l'operazione Add richiamano un metodo nel server che può essere sincrono o asincrono. Se il contratto è utilizzato per implementare il servizio, l'impostazione predefinita prevede che le richieste in ingresso siano inviate al metodo sincrono.

[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);  
   }  

Commenti

Utilizzare la proprietà AsyncPattern per compilare operazioni di servizio che possono essere chiamate in modo asincrono nel server, nel client o in entrambi. La proprietà AsyncPattern informa in fase di esecuzione che per un metodo Begin esiste un metodo End corrispondente conforme al modello di progettazione dei metodi asincroni di .NET Framework. Oltre a consentire di aumentare la scalabilità e le prestazioni lato server senza influire sui client del servizio, la compilazione di metodi asincroni lato server che implementano un'operazione di servizio è particolarmente indicata quando un'operazione di servizio deve restituire un valore al client dopo aver eseguito un'operazione di lunga durata eseguibile in modo asincrono.

I client non subiscono alcuna alterazione in quanto la coppia dei metodi asincroni nel server è un dettaglio di implementazione che non influisce sulla descrizione WSDL (Web Services Description Language) sottostante dell'operazione. Tali metodi appaiono <output> ai client come singola operazione con <input> e messaggi correlati. WCF instrada automaticamente i messaggi in ingresso al Begin<methodName> metodo e instrada i risultati della End<methodName> chiamata al messaggio in uscita. I canali client possono pertanto rappresentare la coppia di metodi come un'unica operazione sincrona o come una coppia di operazioni asincrone. La rappresentazione client non influisce in alcun caso o modo sull'implementazione asincrona nel server.

I contratti client possono utilizzare la proprietà AsyncPattern per indicare una coppia di metodi asincroni utilizzabili dal client per richiamare l'operazione in modo asincrono. In genere, le applicazioni client usano lo strumento ServiceModel Metadata Utility Tool (Svcutil.exe) e l'opzione /async per generare una Begin<methodName> coppia di metodi e End<methodName> che il client può usare per richiamare l'operazione in modo asincrono.

Nota

Se un'operazione di servizio presenta sia una versione asincrona sia una versione sincrona, il comportamento predefinito del servizio è richiamare la versione sincrona.

Si applica a