Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
En este documento se proporciona una vista general de la arquitectura de Windows Communication Foundation (WCF). Está pensado para explicar conceptos clave y cómo encajan juntos. Para ver un tutorial sobre cómo crear la versión más sencilla de un servicio y un cliente WCF, consulte Tutorial de introducción. Para obtener información sobre la programación de WCF, consulte Programación básica de WCF.
Aspectos básicos de WCF
WCF es un entorno de ejecución y un conjunto de API para crear sistemas que envían mensajes entre servicios y clientes. La misma infraestructura y API se usan para crear aplicaciones que se comunican con otras aplicaciones en el mismo sistema informático o en un sistema que reside en otra empresa y se accede a través de Internet.
Mensajería y puntos de conexión
WCF se basa en la noción de comunicación basada en mensajes, y todo lo que se pueda modelar como mensaje (por ejemplo, una solicitud HTTP o un mensaje Message Queuing (también conocido como MSMQ) se puede representar de forma uniforme en el modelo de programación. Esto permite una API unificada en distintos mecanismos de transporte.
El modelo distingue entre los clientes, que son aplicaciones que inician la comunicación y los servicios, que son aplicaciones que esperan a que los clientes se comuniquen con ellos y respondan a esa comunicación. Una sola aplicación puede actuar como un cliente y un servicio. Para obtener ejemplos, consulte Servicios dúplex y Conexión de redes punto a punto.
Los mensajes se envían entre puntos de conexión. Los puntos de conexión son lugares donde se envían o reciben mensajes (o ambos) y definen toda la información necesaria para el intercambio de mensajes. Un servicio expone uno o varios puntos de conexión de aplicación (así como cero o más puntos de conexión de infraestructura) y el cliente genera un punto de conexión compatible con uno de los puntos de conexión del servicio.
Un punto de conexión describe de forma estándar dónde se deben enviar los mensajes, cómo se deben enviar y cuáles deben ser los mensajes. Un servicio puede exponer esta información como metadatos que los clientes pueden procesar para generar clientes WCF adecuados y pilas de comunicación.
Protocolos de comunicación
Un elemento necesario de la pila de comunicación es el protocolo de transporte. Los mensajes se pueden enviar a través de intranets e Internet mediante transportes comunes, como HTTP y TCP. Otros transportes incluidos admiten la comunicación con aplicaciones Message Queuing (MSMQ) y nodos en una malla de redes del mismo nivel. Se pueden agregar más mecanismos de transporte mediante los puntos de extensión integrados de WCF.
Otro elemento necesario de la pila de comunicación es la codificación que especifica cómo se da formato a cualquier mensaje determinado. WCF proporciona las siguientes codificaciones:
Codificación de texto, codificación interoperable.
Codificación del mecanismo de optimización de transmisión de mensajes (MTOM), que es una manera interoperable de enviar de forma eficaz datos binarios no estructurados a y desde un servicio.
Codificación binaria para una transferencia eficaz.
Se pueden agregar más mecanismos de codificación (por ejemplo, una codificación de compresión) mediante los puntos de extensión integrados de WCF.
Patrones de mensaje
WCF admite varios patrones de mensajería, como la solicitud-respuesta, la comunicación unidireccional y dúplex. Los diferentes transportes admiten diferentes patrones de mensajería y, por tanto, afectan a los tipos de interacciones que admiten. Las API y el entorno de ejecución de WCF también le ayudan a enviar mensajes de forma segura y confiable.
Términos de WCF
Entre otros conceptos y términos usados en la documentación de WCF se incluyen los siguientes:
Mensaje Una unidad independiente de datos que puede constar de varias partes, incluido un cuerpo y encabezados.
Servicio Construcción que expone uno o varios puntos de conexión, con cada punto de conexión que expone una o varias operaciones de servicio.
Extremo Un punto de construcción en el que se envían o reciben mensajes (o ambos). Consta de una ubicación (una dirección) que define dónde se pueden enviar los mensajes, una especificación del mecanismo de comunicación (un enlace) que describe cómo se deben enviar los mensajes y una definición para un conjunto de mensajes que se pueden enviar o recibir (o ambos) en esa ubicación (un contrato de servicio) que describe qué mensaje se puede enviar.
Un servicio WCF se expone al mundo como una colección de puntos de conexión.
Punto de conexión de la aplicación Un punto de conexión expuesto por la aplicación y que corresponde a un contrato de servicio implementado por la aplicación.
Punto de conexión de infraestructura Punto de conexión expuesto por la infraestructura para facilitar la funcionalidad necesaria o proporcionada por el servicio que no está relacionado con un contrato de servicio. Por ejemplo, un servicio podría tener un punto de conexión de infraestructura que proporcione información de metadatos.
Dirección Especifica la ubicación donde se reciben los mensajes. Se especifica como identificador uniforme de recursos (URI). El elemento de esquema URI asigna un nombre al mecanismo de transporte que se va a usar para llegar a la dirección, como HTTP y TCP. La parte jerárquica del URI contiene una ubicación única cuyo formato depende del mecanismo de transporte.
La dirección del punto de conexión permite crear direcciones de punto de conexión únicas para cada punto de conexión de un servicio o, en determinadas condiciones, para compartir una dirección entre puntos de conexión. En el ejemplo siguiente se muestra una dirección mediante el protocolo HTTPS con un puerto no predeterminado:
HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService
Enlace Define cómo un punto de conexión se comunica con el mundo. Se construye de un conjunto de componentes denominados elementos de enlace que "apilan" uno encima del otro para crear la infraestructura de comunicación. Al menos, un enlace define el transporte (como HTTP o TCP) y la codificación que se usa (como texto o binario). Un enlace puede contener elementos de enlace que especifican detalles como los mecanismos de seguridad usados para proteger los mensajes o el patrón de mensaje usado por un punto de conexión. Para obtener más información, consulte Configuración de servicios.
Elemento Binding Representa una parte concreta del enlace, como un transporte, una codificación, una implementación de un protocolo de nivel de infraestructura (como WS-ReliableMessaging) o cualquier otro componente de la pila de comunicación.
Comportamientos Componente que controla varios aspectos en tiempo de ejecución de un servicio, un punto de conexión, una operación determinada o un cliente. Los comportamientos se agrupan según el ámbito: los comportamientos comunes afectan a todos los puntos de conexión globalmente, los comportamientos de servicio solo afectan a los aspectos relacionados con el servicio, los comportamientos de punto de conexión solo afectan a las propiedades relacionadas con los puntos de conexión y los comportamientos de nivel de operación afectan a determinadas operaciones. Por ejemplo, un comportamiento del servicio está limitando que especifica cómo un servicio reacciona cuando un exceso de mensajes amenaza agobiar sus funciones del control. Por otro lado, un comportamiento de punto de conexión controla solo los aspectos relevantes para los puntos de conexión, como cómo y dónde encontrar una credencial de seguridad.
Enlaces proporcionados por el sistema WCF incluye una serie de enlaces proporcionados por el sistema. Se trata de colecciones de elementos de enlace optimizados para escenarios específicos. Por ejemplo, WSHttpBinding está diseñado para la interoperabilidad con servicios que implementan diversas especificaciones WS-*. Estos enlaces predefinidos ahorran tiempo al presentar solo las opciones que se pueden aplicar correctamente al escenario específico. Si un enlace predefinido no cumple sus requisitos, puede crear su propio enlace personalizado.
Configuración frente a codificación El control de una aplicación se puede realizar a través de la codificación, a través de la configuración o mediante una combinación de ambos. La configuración tiene la ventaja de permitir que alguien que no sea el desarrollador (por ejemplo, un administrador de red) establezca los parámetros de cliente y servicio después de escribir el código y sin tener que volver a compilar. La configuración no solo permite establecer valores como direcciones de punto de conexión, sino que también permite un mayor control al permitirle agregar puntos de conexión, enlaces y comportamientos. La codificación permite al desarrollador conservar un control estricto sobre todos los componentes del servicio o cliente, y cualquier configuración realizada a través de la configuración se puede inspeccionar y, si es necesario, se puede invalidar mediante el código.
Operación de servicio Procedimiento definido en el código de un servicio que implementa la funcionalidad de una operación. Esta operación se expone a los clientes como métodos en un cliente WCF. El método puede devolver un valor y puede tomar un número opcional de argumentos, o tomar ningún argumento y no devolver ninguna respuesta. Por ejemplo, una operación que funciona como una simple "Hello" se puede usar como notificación de la presencia de un cliente y para iniciar una serie de operaciones.
Contrato de servicio Vincula varias operaciones relacionadas en una sola unidad funcional. El contrato puede definir ajustes del nivel de servicio, como el espacio de nombres del servicio, un contrato de devolución de llamadas correspondiente y otros ajustes de este tipo. En la mayoría de los casos, el contrato se define mediante la creación de una interfaz en el lenguaje de programación que prefiera y la aplicación del ServiceContractAttribute atributo a la interfaz. El código de servicio real se obtiene implementando la interfaz.
Contrato de operación Un contrato de operación define los parámetros y el tipo de valor devuelto de una operación. Al crear una interfaz que defina el contrato de servicio, se firma un contrato de operación aplicando el OperationContractAttribute atributo a cada definición de método que forma parte del contrato. Las operaciones se pueden modelar como tomar un solo mensaje y devolver un único mensaje, o como tomar un conjunto de tipos y devolver un tipo. En este último caso, el sistema determinará el formato de los mensajes que deben intercambiarse para esa operación.
Contrato de mensaje Describe el formato de un mensaje. Por ejemplo, declara si los elementos del mensaje deben ir en encabezados frente al cuerpo, qué nivel de seguridad se debe aplicar a qué elementos del mensaje, etc.
Contrato de error Se puede asociar a una operación de servicio para indicar errores que se pueden devolver al autor de la llamada. Una operación puede tener cero o más errores asociados. Estos fallos SOAP se modelan como excepciones en el modelo de programación.
Contrato de datos Las descripciones de los metadatos de los tipos de datos que usa un servicio. Esto permite a otros usuarios interoperar con el servicio. Los tipos de datos se pueden usar en cualquier parte de un mensaje, por ejemplo, como parámetros o tipos de valor devuelto. Si el servicio usa solo tipos simples, no es necesario usar explícitamente contratos de datos.
Alojamiento Un servicio debe hospedarse en algún proceso. Un host es una aplicación que controla la duración del servicio. Los servicios pueden ser autohospedados o administrados por un proceso de hospedaje existente.
Servicio autohospedado Servicio que se ejecuta dentro de una aplicación de proceso que creó el desarrollador. El desarrollador controla su duración, establece las propiedades del servicio, abre el servicio (que lo establece en un modo de escucha) y cierra el servicio.
Proceso de hospedaje Una aplicación diseñada para hospedar servicios. Estos incluyen Internet Information Services (IIS), Servicios de activación de Windows (WAS) y Servicios de Windows. En estos escenarios hospedados, el host controla la duración del servicio. Por ejemplo, con IIS puede configurar un directorio virtual que contenga el ensamblado de servicio y el archivo de configuración. Cuando se recibe un mensaje, IIS inicia el servicio y controla su duración.
Instancia Un servicio tiene un modelo de creación de instancias. Hay tres modelos de creación de instancias: "único", en el que un único objeto CLR atiende a todos los clientes; " por llamada", en la que se crea un nuevo objeto CLR para controlar cada llamada de cliente; y "por sesión", en la que se crea un conjunto de objetos CLR, uno para cada sesión independiente. La elección de un modelo de creación de instancias depende de los requisitos de la aplicación y del patrón de uso esperado del servicio.
Aplicación cliente Programa que intercambia mensajes con uno o varios puntos de conexión. La aplicación cliente comienza creando una instancia de un cliente WCF y llamando a métodos del cliente WCF. Es importante tener en cuenta que una sola aplicación puede ser un cliente y un servicio.
Canal Implementación concreta de un elemento de enlace. El enlace representa la configuración y el canal es la implementación asociada a esa configuración. Por lo tanto, hay un canal asociado a cada elemento de enlace. Los canales se apilan uno sobre otro para crear la implementación concreta de la vinculación: la pila de canales.
Cliente WCF Una construcción de aplicación cliente que expone las operaciones de servicio como métodos (en el lenguaje de programación de .NET Framework que prefiera, como Visual Basic o Visual C#). Cualquier aplicación puede hospedar un cliente WCF, incluida una aplicación que hospeda un servicio. Por lo tanto, es posible crear un servicio que incluya clientes WCF de otros servicios.
Un cliente WCF se puede generar automáticamente mediante la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) y apuntarlo a un servicio en ejecución que publica metadatos.
Metadatos En un servicio, describe las características del servicio que una entidad externa necesita comprender para comunicarse con el servicio. La herramienta de utilidad de metadatos serviceModel (Svcutil.exe) puede consumir metadatos para generar un cliente WCF y la configuración complementaria que una aplicación cliente puede usar para interactuar con el servicio.
Los metadatos expuestos por el servicio incluyen documentos de esquema XML, que definen el contrato de datos del servicio y los documentos WSDL, que describen los métodos del servicio.
Cuando se habilita, WCF genera automáticamente los metadatos del servicio inspeccionando el servicio y sus puntos de conexión. Para publicar metadatos desde un servicio, debe habilitar explícitamente el comportamiento de los metadatos.
Seguridad En WCF, incluye la confidencialidad (cifrado de mensajes para evitar la interceptación), la integridad (los medios para la detección de alteraciones con el mensaje), la autenticación (los medios para la validación de servidores y clientes) y la autorización (el control del acceso a los recursos). Estas funciones se proporcionan aprovechando los mecanismos de seguridad existentes, como TLS a través de HTTP (también conocido como HTTPS) o mediante la implementación de una o varias de las distintas especificaciones de seguridad de WS-*.
Modo de seguridad de transporte Especifica que los mecanismos de capa de transporte (como HTTPS) proporcionan confidencialidad, integridad y autenticación. Cuando se usa un transporte como HTTPS, este modo tiene la ventaja de ser eficiente en su rendimiento y bien comprendido debido a su prevalencia en Internet. La desventaja es que este tipo de seguridad se aplica por separado en cada salto de la ruta de comunicación, lo que hace que la comunicación sea susceptible a un ataque "hombre en el medio".
Modo de seguridad de mensajes Especifica que la seguridad se proporciona mediante la implementación de una o varias de las especificaciones de seguridad, como la especificación denominada Seguridad de servicios web: Seguridad de mensajes SOAP. Cada mensaje contiene los mecanismos necesarios para proporcionar seguridad durante su tránsito y para permitir que los receptores detecten alteraciones y descifrar los mensajes. En este sentido, la seguridad se encapsula dentro de cada mensaje, lo que proporciona seguridad de un extremo a otro en varios saltos. Dado que la información de seguridad se convierte en parte del mensaje, también es posible incluir varios tipos de credenciales con el mensaje (se conocen como notificaciones). Este enfoque también tiene la ventaja de permitir que el mensaje viaje de forma segura sobre cualquier transporte, incluidos varios transportes entre su origen y destino. La desventaja de este enfoque es la complejidad de los mecanismos criptográficos empleados, lo que da lugar a implicaciones de rendimiento.
Transporte con el modo de seguridad de credenciales de mensaje Especifica el uso de la capa de transporte para proporcionar confidencialidad, autenticación e integridad de los mensajes, mientras que cada uno de los mensajes puede contener varias credenciales (notificaciones) requeridas por los receptores del mensaje.
WS-* Abreviada para el creciente conjunto de especificaciones de servicio web (WS), como WS-Security, WS-ReliableMessaging, etc., que se implementan en WCF.