Compartir a través de


Creación de un contrato dúplex

En este tema se muestran los pasos básicos para crear métodos que utilicen un contrato dúplex (bidireccional). Un contrato dúplex permite a los clientes y servidores comunicarse entre sí independientemente de manera que cada uno puede iniciar llamadas al otro. El contrato dúplex es uno de tres modelos de mensaje disponible para los servicios de Windows Communication Foundation (WCF). Los otros dos modelos de mensaje son unidireccionales y de solicitud‑respuesta. Un contrato dúplex consta de dos contratos unidireccionales entre el cliente y el servidor y no requiere que se pongan en correlación las llamadas al método. Utilice este tipo de contrato cuando su servicio deba consultar más información en el cliente o elevar eventos explícitamente en el cliente. Para obtener más información acerca de creación de una aplicación cliente para un contrato dúplex, vea Cómo: Obtener acceso a los servicios con un contrato dúplex. Para obtener un ejemplo práctico, vea el ejemplo Service Contract: Duplex.

Creación de un contrato dúplex

  1. Cree la interfaz que crea el lado del servidor del contrato dúplex.

  2. Aplique la clase ServiceContractAttribute a la interfaz.

  3. Declare las firmas de los métodos en la interfaz.

  4. Aplique la clase OperationContractAttribute a cada firma de método que debe formar parte del contrato público.

  5. Cree la interfaz de devolución de llamada que define el conjunto de operaciones que el servicio puede invocar en el cliente.

  6. Declare las firmas de métodos en la interfaz de devolución de llamadas.

  7. Aplique la clase OperationContractAttribute a cada firma de método que debe formar parte del contrato público.

  8. Vincule las dos interfaces en un contrato dúplex estableciendo la propiedad CallbackContract de la interfaz principal en el tipo de la interfaz de devolución de llamadas.

Realización de llamadas a métodos en el cliente

  1. En la implementación del servicio del contrato principal, declare una variable para la interfaz de devolución de llamadas.

  2. Establezca la variable en la referencia al objeto devuelta por el método GetCallbackChannel de la clase OperationContext.

  3. Llame a los métodos definidos por la interfaz de devolución de llamadas.

Ejemplo

El siguiente código de ejemplo muestra la comunicación dúplex. El contrato del servicio contiene las operaciones del servicio para avanzar o retroceder. El contrato del cliente contiene una operación del servicio para informar sobre su posición.

  • La aplicación de los atributos ServiceContractAttribute y OperationContractAttribute permite la generación automática de definiciones de contrato de servicios en el Lenguaje de descripción de servicios web (WSDL).
  • Utilice la ServiceModel Metadata Utility Tool (Svcutil.exe) para recuperar el documento WSDL, así como (opcional) el código y la configuración de un cliente.
  • Se deben proteger los extremos que exponen servicios dúplex. Cuando un servicio recibe un mensaje dúplex, examina el elemento ReplyTo en ese mensaje entrante para determinar a dónde enviar la respuesta. Si no se protege el canal, un cliente que no es de confianza podría enviar un mensaje malintencionado con un ReplyTo del equipo de destino, provocando una denegación de servicio del equipo de destino. Esto no es un problema con mensajes de solicitud‑respuesta normales, porque el ReplyTo se pasa por alto y se envía la respuesta al canal en el que entró el mensaje original.

Consulte también

Tareas

Cómo: Obtener acceso a los servicios con un contrato dúplex
Definición de un contrato de servicio de Windows Communication Foundation

Referencia

ServiceContractAttribute
OperationContractAttribute

Conceptos

Diseño e implementación de servicios

Otros recursos

Service Contract: Duplex
Service Contract: Session