Diseño e implementación de serviciosDesigning and Implementing Services

En esta sección se muestra cómo definir e implementar contratos WCF.This section shows you how to define and implement WCF contracts. Un contrato de servicio especifica lo que un punto de conexión comunica al mundo exterior.A service contract specifies what an endpoint communicates to the outside world. 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.At a more concrete level, it is a statement about a set of specific messages organized into basic message exchange patterns (MEPs), such as request/reply, one-way, and duplex. 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.If a service contract is a logically related set of message exchanges, a service operation is a single message exchange. 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).For example, a Hello operation must obviously accept one message (so the caller can announce the greeting) and may or may not return a message (depending upon the courtesy of the operation).

Para obtener más información sobre los contratos y otros conceptos principales de Windows Communication Foundation (WCF), vea conceptos básicos de Windows Communication Foundation.For more information about contracts and other core Windows Communication Foundation (WCF) concepts, see Fundamental Windows Communication Foundation Concepts. Este tema se centra en describir los contratos de servicio.This topic focuses on understanding service contracts. Para obtener más información sobre cómo crear clientes que usen contratos de servicio para conectarse a los servicios, consulte información general del cliente de WCF.For more information about how to build clients that use service contracts to connect to services, see WCF Client Overview.

Información general delOverview

En este tema se proporciona una orientación conceptual de alto nivel para diseñar e implementar servicios WCF.This topic provides a high level conceptual orientation to designing and implementing WCF services. Los subtemas proporcionan más información detallada sobre las características de diseño e implementación.Subtopics provide more detailed information about the specifics of design and implementation. Antes de diseñar e implementar la aplicación WCF, se recomienda que:Before designing and implementing your WCF application, it is recommended that you:

  • Entender lo que es un contrato de servicio, cómo funciona, y cómo crear uno.Understand what a service contract is, how it works, and how to create one.

  • Comprender que los contratos especifican requisitos mínimos que la configuración en tiempo de ejecución o el entorno de hospedaje pueden no admitir.Understand that contracts state minimum requirements that runtime configuration or the hosting environment may not support.

Contratos de servicioService Contracts

Un contrato de servicio especifica lo siguiente:A service contract specifies the following:

  • Las operaciones que el contrato expone.The operations a contract exposes.

  • La firma de las operaciones en términos de mensajes intercambiados.The signature of the operations in terms of messages exchanged.

  • Los tipos de datos de estos mensajes.The data types of these messages.

  • La ubicación de las operaciones.The location of the operations.

  • Los protocolos concretos y formatos de serialización que se utilizan para admitir la comunicación correcta con el servicio.The specific protocols and serialization formats that are used to support successful communication with the service.

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.For example, a purchase order contract might have a CreateOrder operation that accepts an input of order information types and returns success or failure information, including an order identifier. También podría tener una operación GetOrderStatus que acepte un identificador de orden y devuelva información de estado de la orden.It might also have a GetOrderStatus operation that accepts an order identifier and returns order status information. Un contrato de servicio de este tipo especificaría lo siguiente:A service contract of this sort would specify:

  1. Que el contrato de la orden compra consistiese en las operaciones CreateOrder y GetOrderStatus.That the purchase order contract consisted of CreateOrder and GetOrderStatus operations.

  2. Que las operaciones han especificado mensajes de entrada y de salida.That the operations have specified input messages and output messages.

  3. Los datos que estos mensajes pueden llevar.The data that these messages can carry.

  4. Instrucciones de categorías sobre la infraestructura de la comunicación necesaria para procesar correctamente los mensajes.Categorical statements about the communication infrastructure necessary to successfully process the messages. Por ejemplo, estos detalles incluyen qué formularios de seguridad son necesarios para establecer una comunicación correcta.For example, these details include whether and what forms of security are required to establish successful communication.

Para transmitir este tipo de información a otras aplicaciones en muchas plataformas (incluidas plataformas que no sean de Microsoft), los contratos de servicio XML se expresan públicamente en formatos XML estándar, como el lenguaje de descripción de servicios web (WSDL) y el esquema XML (XSD), entre otros.To convey this kind of information to other applications on many platforms (including non-Microsoft platforms), XML service contracts are publicly expressed in standard XML formats, such as Web Services Description Language (WSDL) and XML Schema (XSD), among others. 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.Developers for many platforms can use this public contract information to create applications that can communicate with the service, both because they understand the language of the specification and because those languages are designed to enable interoperation by describing the public forms, formats, and protocols that the service supports. Para obtener más información sobre cómo WCF controla este tipo de información, vea metadatos.For more information about how WCF handles this kind of information, see Metadata.

Los contratos se pueden expresar de muchas maneras, pero, aunque WSDL y XSD son lenguajes excelentes para describir servicios de una manera accesible, se trata de lenguajes difíciles de usar directamente y son simplemente descripciones de un servicio, no implementaciones de contratos de servicio.Contracts can be expressed many ways, and while WSDL and XSD are excellent languages to describe services in an accessible way, they are difficult languages to use directly and are merely descriptions of a service, not service contract implementations. Por lo tanto, las aplicaciones WCF usan atributos, interfaces y clases administrados para definir la estructura de un servicio e implementarlo.Therefore, WCF applications use managed attributes, interfaces, and classes both to define the structure of a service and to implement it.

El contrato resultante definido en tipos administrados se puede exportar como metadatos (WSDL y XSD) cuando lo necesiten clientes u otros implementadores de servicio.The resulting contract defined in managed types can be exported as metadata—WSDL and XSD—when needed by clients or other service implementers. El resultado es un modelo de programación sencillo que se puede describir (usando metadatos públicos) en cualquier aplicación cliente.The result is a straightforward programming model that can be described (using public metadata) to any client application. Los detalles de los mensajes SOAP subyacentes, el transporte y la información relacionada con la seguridad, etc., pueden dejarse en WCF, que realiza automáticamente las conversiones necesarias para y desde el sistema de tipo de contrato de servicio al sistema de tipos XML.The details of the underlying SOAP messages, the transportation and security-related information, and so on, can be left to WCF, which performs the necessary conversions to and from the service contract type system to the XML type system automatically.

Para obtener más información sobre el diseño de contratos, consulte diseño de contratos de servicio.For more information about designing contracts, see Designing Service Contracts. Para obtener más información sobre la implementación de contratos, vea implementación de contratos de servicio.For more information about implementing contracts, see Implementing Service Contracts.

Mensajes arriba y al centroMessages Up Front and Center

Utilizar interfaces, clases y métodos administrados para modelar las operaciones de servicio es sencillo cuando está acostumbrado a firmas de método de estilo de llamada a procedimiento remoto (RPC), en las que pasar parámetros a un método y recibir valores de devolución es la forma normal de solicitar funcionalidad desde un objeto u otro tipo de código.Using managed interfaces, classes, and methods to model service operations is straightforward when you are used to remote procedure call (RPC)-style method signatures, in which passing parameters into a method and receiving return values is the normal form of requesting functionality from an object or other type of code. Por ejemplo, los programadores que usan lenguajes administrados C++ como Visual Basic y com pueden aplicar sus conocimientos del enfoque de estilo RPC (ya sea mediante objetos o interfaces) a la creación de contratos de servicio WCF sin experimentar los problemas inherentes a los sistemas de objetos distribuidos de estilo RPC.For example, programmers using managed languages such as Visual Basic and C++ COM can apply their knowledge of the RPC-style approach (whether using objects or interfaces) to the creation of WCF service contracts without experiencing the problems inherent in RPC-style distributed object systems. La orientación del servicio proporciona las ventajas de la programación acoplada y orientada a mensajes mientras mantiene la facilidad y familiaridad de la experiencia de programación de RPC.Service orientation provides the benefits of loosely coupled, message-oriented programming while retaining the ease and familiarity of the RPC programming experience.

Muchos programadores se sienten más cómodos con las interfaces de programación de aplicaciones orientadas a mensajes, como las colas de mensajes como Microsoft MSMQ, los espacios de nombres System.Messaging en .NET Framework o el envío de XML no estructurado en solicitudes HTTP, por nombrar algunos.Many programmers are more comfortable with message-oriented application programming interfaces, such as message queues like Microsoft MSMQ, the System.Messaging namespaces in the .NET Framework, or sending unstructured XML in HTTP requests, to name a few. Para obtener más información sobre la programación en el nivel de mensaje, vea uso de contratos de mensaje, programación de nivel de canal de servicioe interoperabilidad con aplicaciones POX.For more information about programming at the message level, see Using Message Contracts, Service Channel-Level Programming, and Interoperability with POX Applications.

Introducción a la jerarquía de los requisitosUnderstanding the Hierarchy of Requirements

Un contrato de servicio agrupa operaciones; especifica el patrón de intercambio de mensajes, 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).A service contract groups the operations; specifies the message exchange pattern, message types, and data types those messages carry; and indicates categories of run-time behavior an implementation must have to support the contract (for example, it may require that messages be encrypted and signed). El contrato de servicio en sí mismo no especifica precisamente cómo se cumplen estos requisitos, solo que son obligatorios.The service contract itself does not specify precisely how these requirements are met, only that they must be. El tipo de cifrado o la manera en la que se firma un mensaje depende de la implementación y configuración de un servicio conforme.The type of encryption or the manner in which a message is signed is up to the implementation and configuration of a compliant service.

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.Notice the way that the contract requires certain things of the service contract implementation and the run-time configuration to add behavior. El conjunto de requisitos que se deben cumplir para exponer un servicio para usar compilaciones en el conjunto anterior de requisitos.The set of requirements that must be met to expose a service for use builds on the preceding set of requirements. 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.If a contract makes requirements of the implementation, an implementation can require yet more of the configuration and bindings that enable the service to run. Finalmente, la aplicación host también debe admitir cualquier requisito que la configuración de servicio y los enlaces agreguen.Finally, the host application must also support any requirements that the service configuration and bindings add.

Este proceso de requisitos aditivos es importante tener en cuenta al diseñar, implementar, configurar y hospedar una aplicación de servicio de Windows Communication Foundation (WCF).This additive requirement process is important to keep in mind while designing, implementing, configuring, and hosting a Windows Communication Foundation (WCF) service application. Por ejemplo, el contrato puede especificar que necesita admitir una sesión.For example, the contract can specify that it needs to support a session. En ese caso, deberá configurar el enlace para admitir ese requisito contractual o la implementación del servicio no funcionará.If so, then you must configure the binding to support that contractual requirement, or the service implementation will not work. 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 Autenticación integrada de Windows activada y la compatibilidad anónima desactivada.Or if your service requires Windows Integrated Authentication and is hosted in Internet Information Services (IIS), the Web application in which the service resides must have Windows Integrated Authentication turned on and anonymous support turned off. Para obtener más información sobre las características y el impacto de los distintos tipos de aplicación host de servicio, vea servicios de hospedaje.For more information about the features and impact of the different service host application types, see Hosting Services.

Vea tambiénSee also