Compartir a través de


Cómo llamar a operaciones de manera asincrónica mediante un generador de canales

En este tema se cubre cómo un cliente puede obtener acceso de forma asincrónica a una operación del servicio al utilizar una aplicación de cliente basada en ChannelFactory. (Al utilizar un objeto System.ServiceModel.ClientBase para invocar un servicio, puede utilizar el modelo de llamada asincrónica orientado a eventos. Para obtener más información, consulte Cómo llamar a operaciones del servicio WCF de forma asincrónica. Para obtener más información sobre el modelo de llamada asincrónica basada en eventos, vea Multithreaded Programming with the Event-based Asynchronous Pattern).

El servicio en este tema implementa la interfaz ICalculator. El cliente puede llamar a las operaciones en esta interfaz de forma asincrónica, lo que significa que las operaciones como Add se dividen en dos métodos, BeginAdd y EndAdd, de los cuales el primero inicia la llamada y el segundo recupera el resultado cuando la operación termina. Para obtener un ejemplo que muestra cómo implementar de forma asincrónica una operación en un servicio, vea Cómo: Implementar una operación de servicios asincrónica. Para obtener información detallada de las operaciones sincrónicas y asincrónicas, vea Operaciones sincrónicas y asincrónicas.

Procedimiento

Para llamar a operaciones de servicio WCF de forma asincrónica

  1. Ejecute la herramienta ServiceModel Metadata Utility Tool (Svcutil.exe) con la opción /async tal y como se muestra en el comando siguiente.

    svcutil /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost:8000/servicemodelsamples/service/mex /a
    

    Esto genera una versión de cliente asincrónica del contrato de servicio para la operación.

  2. Cree una función de devolución de llamada a la que se va a llamar cuando la operación asincrónica haya finalizado, tal y como aparece en el siguiente código de ejemplo.

  3. Para obtener acceso de forma asincrónica a una operación de servicio, cree el cliente y llame a Begin[Operation] (por ejemplo, BeginAdd) y especifique una función de devolución de llamada, tal y como se muestra en el siguiente código de ejemplo.

    Cuando la función de devolución de llamada se ejecuta, el cliente llama a End<operation> (por ejemplo, EndAdd) para recuperar el resultado.

Ejemplo

El servicio que se usa con el código de cliente que se utiliza en el procedimiento anterior implementa la interfaz ICalculator tal y como se muestra en el código siguiente. En el lado del servicio, el tiempo de ejecución de Windows Communication Foundation (WCF) invoca de manera sincrónica a las operaciones Add y Subtract del contrato, aunque los pasos precedentes del cliente se invoquen de manera asincrónica en el cliente. Las operaciones Divide y Multiply se utilizan para invocar de forma asincrónica el servicio en el lado del servicio, incluso aunque el cliente los invoque de forma sincrónica. Este ejemplo establece la propiedad AsyncPattern en true. Este valor de la propiedad, en combinación con la implementación del modelo asincrónico .NET Framework, indica al tiempo de ejecución para invocar la operación de forma asincrónica.

Consulte también

Otros recursos

Service Contract: Asynchronous Sample