Compartir a través de


OperationContractAttribute.AsyncPattern Propiedad

Definición

Indica que una operación se implementa usando de forma asincrónica un par de métodos Begin<methodName> y End<methodName> en un contrato de servicio.

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

Valor de propiedad

truesi el Begin< método methodName>coincide con un End< método methodName> y la infraestructura puede tratarla como una operación que se implementa como un par de métodos asincrónicos en la interfaz de servicio; de lo contrario, false. De manera predeterminada, es false.

Ejemplos

El ejemplo de código siguiente muestra un canal de cliente a un contrato de servicio que incluye tanto una versión sincrónica de Add como una asincrónica. Si la interfaz de contrato se utiliza en el cliente, tanto la operación BeginAdd como la operación Add invocan un método en el servidor que puede ser o no ser sincrónico. Si el contrato se utiliza para implementar el servicio, el valor predeterminado es que las solicitudes entrantes se envían al método sincrónico.

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

Comentarios

Utilice la propiedad AsyncPattern para crear operaciones de servicio a las que se pueden llamar de forma asincrónica en el servidor, el cliente o ambos. La propiedad AsyncPattern informa al tiempo de ejecución que un método Begin tiene un método End con el que coincide y que se ajusta al patrón de diseño de método asincrónico de .NET Framework. Crear métodos asincrónicos de servidor que implementan una operación de servicio aumentan la escalabilidad del servidor y el rendimiento sin afectar a los clientes del servicio. Se recomiendan cuando una operación de servicio debe devolver algo al cliente después de realizar una operación larga que se puede realizar de forma asincrónica.

A los clientes no les afecta porque el par de métodos asincrónicos en el servidor es un detalle de implementación que no afecta a la descripción del lenguaje de descripción de servicios Web (WSDL) subyacente de la operación. Estos métodos parecen clientes como una sola operación con <input> y mensajes correlacionados <output> . WCF enruta automáticamente los mensajes entrantes al Begin<método methodName> y enruta los resultados de la End< llamada methodName> al mensaje saliente. Por consiguiente, los canales del cliente pueden representar el par de método como una operación sincrónica o como un par de operaciones asincrónicas. En ningún caso la representación del cliente afecta a la implementación asincrónica en el servidor.

Los contratos del cliente pueden utilizar la propiedad AsyncPattern para indicar un par de métodos asincrónicos que el cliente puede utilizar para invocar de forma asincrónica la operación. Normalmente, las aplicaciones cliente usan la herramienta Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) y la /async opción de generar un Begin< par de métodos methodName> y End<methodName> que el cliente puede usar para invocar la operación de forma asincrónica.

Nota

Si una operación de servicio tiene una versión asincrónica y otra sincrónica, el comportamiento predeterminado en el servicio será invocar la versión sincrónica.

Se aplica a