Contratos

En esta sección se muestra cómo definir e implementar contratos de Windows Communication Foundation (WCF). Un contrato de servicio especifica lo que un punto de conexión comunica al mundo exterior. En un nivel más concreto, es una instrucción sobre un conjunto de mensajes concretos organizada en patrones de intercambio de mensajes básicos (MEP), como solicitud/respuesta, unidireccional y dúplex. Si un contrato de servicio es un conjunto relacionado de forma lógica de intercambios de mensajes, una operación de servicio es un intercambio único de mensajes. Por ejemplo, una operación Hello debe aceptar obviamente un mensaje (de manera que el autor de la llamada pueda anunciar el saludo) y puede o no devolver un mensaje (dependiendo de la cortesía de la operación).

Para más información sobre los contratos y otros conceptos básicos de WCF, consulte Conceptos básicos de Windows Communication Foundation. Este tema se centra en describir los contratos de servicio. Para más información sobre cómo crear clientes que usan contratos de servicio para conectarse a servicios, consulte Introducción al cliente WCF. Para más información sobre los canales de cliente, la arquitectura de cliente y otros problemas de cliente, consulte Clientes.

Información general

En este tema se proporciona una orientación conceptual de alto nivel para diseñar e implementar servicios WCF. Los subtemas proporcionan más información detallada sobre las características del diseño e implementación. Antes de diseñar e implementar su aplicación WCF, se recomienda lo siguiente:

  • Entender lo que es un contrato de servicio, cómo funciona, y cómo crear uno.

  • Comprenda que los contratos especifican requisitos mínimos que la configuración en tiempo de ejecución o el entorno de alojamiento pueden no admitir.

Contratos de servicio

Un contrato de servicios es una instrucción que proporciona información sobre:

  • La agrupación de operaciones en un servicio.

  • La firma de las operaciones en términos de mensajes intercambiados.

  • Los tipos de datos de estos mensajes.

  • La ubicación de las operaciones.

  • Los protocolos concretos y formatos de serialización que se utilizan para admitir la comunicación correcta con el servicio.

Por ejemplo, un contrato de orden de compra podría tener una operación CreateOrder que acepte una entrada de tipos de información de orden y devuelva información de error o completada, además de un identificador de orden. También podría tener una operación GetOrderStatus que acepte un identificador de orden y devuelva información de estado de la orden. Un contrato de servicio de este tipo especificaría lo siguiente:

  • Que el contrato de la orden compra consistiese en las operaciones CreateOrder y GetOrderStatus.

  • Que las operaciones han especificado mensajes de entrada y de salida.

  • Los datos que estos mensajes pueden llevar.

  • Instrucciones de categorías sobre la infraestructura de la comunicación necesaria para procesar correctamente los mensajes. Por ejemplo, estos detalles incluyen qué formularios de seguridad son necesarios para establecer una comunicación correcta.

Para transmitir este tipo de información a aplicaciones de otras plataformas (incluidas plataformas que no sean de Microsoft), los contratos de servicio XML se expresan públicamente en formatos XML estándar, como Web Services Description Language (WSDL) y XML Schema (XSD), entre otros. Los desarrolladores para muchas plataformas pueden utilizar esta información de contrato público para crear aplicaciones que pueden comunicarse con el servicio, porque entienden el lenguaje de la especificación y porque esos lenguajes están diseñados para permitir la interoperación describiendo los formularios, formatos y protocolos públicos que el servicio admite. Para más información sobre cómo WCF controla este tipo de información, consulte Metadatos.

Los contratos se pueden expresar de muchas maneras, sin embargo, mientras WSDL y XSD son lenguajes excelentes para describir servicios de una manera accesible, son lenguajes difíciles de usar directamente. En cualquier caso, son simplemente descripciones de un servicio, no implementaciones de contratos de servicio. Por consiguiente, las aplicaciones de WCF utilizan atributos, interfaces y clases administrados para definir la estructura de un servicio e implementarlo.

El contrato resultante definido en tipos administrados se puede convertir (o exportar, que es lo mismo) como metadatos, WSDL y XSD, cuando lo necesitan los clientes u otros implementadores de servicios, sobre todo en otras plataformas. El resultado es un modelo de programación sencillo que se puede describir utilizando metadatos públicos en cualquier aplicación cliente. Los detalles de los mensajes SOAP subyacentes, como la información relacionada con el transporte y la seguridad, pueden dejarse en WCF, que realiza automáticamente las conversiones necesarias entre el sistema de tipos de contratos de servicio y el sistema de tipos XML.

Para más información sobre el diseño de contratos, consulte Diseño de contratos de servicio. Para más información sobre la implementación de contratos, consulte Implementación de contratos de servicio.

Además, WCF también ofrece la posibilidad de desarrollar contratos de servicio completamente en el nivel de mensaje. Para más información sobre el desarrollo de contratos de servicio en el nivel de mensaje, consulte Uso de contratos de mensaje. Para más información sobre el desarrollo de servicios en XML que no son SOAP, consulte Interoperabilidad con aplicaciones POX.

Introducción a la jerarquía de los requisitos

Un contrato de servicio agrupa operaciones; especifica el MEP, tipos de mensaje y tipos de datos que llevan esos mensajes e indica categorías de comportamiento de tiempo de ejecución que una implementación debe tener para admitir el contrato (por ejemplo, puede requerir que los mensajes se cifren y firmen). El contrato de servicio en sí mismo, sin embargo, no especifica precisamente cómo se cumplen estos requisitos, solo que deben ser. Qué tipo de cifrado o cómo se firma un mensaje es tarea de la implementación y configuración de un servicio conforme.

Observe la manera en que el contrato requiere algunas cosas de la implementación del contrato de servicio y la configuración del tiempo de ejecución para agregar comportamiento. El conjunto de requisitos que se deben cumplir para exponer un servicio para usar compilaciones en el conjunto anterior de requisitos. Si un contrato realiza requisitos de la implementación, una implementación puede requerir todavía más de la configuración y enlaces que permiten al servicio ejecutarse. Finalmente, la aplicación host también debe admitir cualquier requisito que la configuración de servicio y los enlaces agreguen.

Es importante que tenga presente este proceso de requisito aditivo mientras diseña, implementa, configura y hospeda una aplicación de servicio Windows Communication Foundation (WCF). Por ejemplo, el contrato puede especificar que necesita admitir una sesión. En ese caso, deberá configurar el enlace para admitir ese requisito contractual o la implementación del servicio no funcionará. O si su servicio requiere Autenticación integrada de Windows y se hospeda en Internet Information Services (IIS), la aplicación web en la que el servicio reside debe tener la Autenticación integrada de Windows activada y la compatibilidad anónima desactivada. Para más información sobre las características y el impacto de los diferentes tipos de aplicación de host de servicios, consulte Hospedaje.

Consulte también