Conceptos básicos de Windows Communication Foundation

En este documento se proporciona una vista de alto nivel de la arquitectura de Windows Communication Foundation (WCF). Pretende explicar los conceptos clave y cómo encajan entre ellos. Si desea obtener un tutorial sobre la creación de la versión más simple de un servicio y cliente de WCF, vea Tutorial de introducción. Para aprender programación de WCF, vea Programación básica de WCF.

Fundamentos de WCF

Windows Communication Foundation (WCF)WCF es un tiempo de ejecución y un conjunto de API para la creación de sistemas que envíen mensajes entre servicios y clientes. La misma infraestructura y API se utilizan para crear aplicaciones que se comuniquen con otras aplicaciones en el mismo sistema del equipo o en un sistema que resida en otra compañía y a la que se obtenga acceso a través de Internet.

Mensajería y extremos

WCF se basa en la noción de comunicación basada en mensajes y cualquier cosa que se pueda modelar como un mensaje (por ejemplo, una solicitud HTTP o un mensaje de MSMQ), se puede representar de manera uniforme en el modelo de programación. Esto habilita una API unificada en todos los mecanismos de transporte diferentes.

El modelo distingue entre clientes, que son aplicaciones que inician la comunicación y servicios, que son aplicaciones que esperan a que los clientes se comuniquen con ellos y respondan a esa comunicación. Una única aplicación puede actuar como cliente y como servicio.

Los mensajes se envían entre extremos. Los extremos son los lugares donde los mensajes se envían o reciben (o ambos), y definen toda la información requerida para el intercambio de mensajes. Un servicio expone uno o más extremos de la aplicación (y a cero o más extremos de la infraestructura), y el cliente genera un extremo que es compatible con uno de los extremos del servicio.

Un extremo describe de una manera basada en estándar dónde se deberían enviar los mensajes, cómo se deberían enviar y qué aspecto deberían tener los mensajes. Un servicio puede exponer esta información como metadatos que los clientes pueden procesar para generar clientes WCF adecuados y pilasde comunicación.

Protocolos de comunicaciones

Un elemento requerido de la pila de la comunicación es el protocolo de transporte. Los mensajes se pueden enviar a través de intranets e Internet utilizando transportes comunes, como HTTP y TCP. Otros transportes incluidos admiten la comunicación con aplicaciones Message Queue Server de Microsoft (MSMQ) y nodos en una malla de redes del mismo nivel. Se pueden agregar más mecanismos de transporte utilizando los puntos de la extensión integrados de WCF.

Otro elemento necesario en 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, una codificación interoperable.
  • Codificación Mecanismo de optimización de transmisión de mensajes (MTOM), que es una manera interoperable de enviar eficazmente 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) utilizando los puntos de extensión integrados de WCF.

Patrones de mensajes

WCF admite varios patrones de mensajería, incluida la comunicación de solicitud-respuesta unidireccional y dúplex. Los transportes diferentes admiten patrones de mensajería diferentes y, por consiguiente, afectan a los tipos de interacciones que admiten. El tiempo de ejecución y las API de WCF también le ayudan a enviar mensajes de manera segura y fiable.

Términos de WCF

Entre otros conceptos y términos usados en la documentación de WCF se incluyen los siguientes.

  • mensaje
    Un mensaje es una unidad autónoma de datos que pueden estar compuestos de varias partes, incluyendo un cuerpo y encabezados.
  • servicio
    Un servicio es una construcción que expone uno o más extremos, y en la que cada extremo expone una o más operaciones de servicio.
  • extremo
    Un extremo es una construcción en la que se envían o reciben mensajes (o ambos). Comprende una ubicación (una dirección) que define dónde se pueden enviar mensajes, una especificación del mecanismo de comunicación (un enlace) que describe cómo se deberían enviar los mensajes, y una definición para un conjunto de mensajes que se puede enviar o se puede recibir (o ambos) en esa ubicación (un contrato de servicio) que describe qué mensajes se pueden enviar.

    Un servicio de WCF se expone al mundo como una colección de extremos.

  • extremo de aplicaciones
    Un extremo expuesto por la aplicación y que corresponde a un contrato de servicios implementado por la aplicación.
  • extremo de infraestructura
    Un extremo que expone la infraestructura para facilitar la funcionalidad necesaria o proporcionada por el servicio que no se relaciona con un contrato de servicios. Por ejemplo, un servicio podría tener un extremo de la infraestructura que proporciona información de metadatos.
  • dirección
    Una dirección especifica la ubicación donde se reciben los mensajes. Se especifica como un identificador uniforme de recursos (URI). La parte del esquema URI nombra el mecanismo de transporte que se ha de utilizar para alcanzar 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 extremo le permite crear direcciones únicas de extremo para cada extremo en un servicio o bajo ciertas condiciones compartir una dirección a lo largo de los extremos. El siguiente ejemplo muestra una dirección que utiliza el protocolo HTTPS con un puerto no predeterminado:

    HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService
    
  • enlace
    Un enlace define cómo se comunica un extremo con el mundo. Consta de un conjunto de componentes llamados elementos de enlace que se "apilan" uno sobre el otro para crear la infraestructura de comunicaciones. Como poco, un enlace define el transporte (como HTTP o TCP) y la codificación que se utiliza (como texto o binario). Un enlace puede contener elementos de enlace que especifican detalles como los mecanismos de seguridad utilizados para proteger los mensajes o el patrón de mensaje utilizado por un extremo. Para obtener más información, vea Configuración de servicios.
  • elemento de enlace
    Un elemento de enlace representa una parte determinada del enlace, como un transporte, una codificación, una implementación de un protocolo del nivel de infraestructura (como WS-ReliableMessaging), o cualquier otro componente de la pila de comunicaciones.
  • comportamientos
    Un comportamiento es un componente que controla varios aspectos en tiempo de ejecución de un servicio, un extremo, una operación determinada o un cliente. Los comportamientos están agrupados en función del ámbito: los comportamientos comunes afectan globalmente a todos los extremos, los comportamientos de servicios sólo afectan a los aspectos relacionados con servicios, los comportamientos de extremos sólo afectan a las propiedades relacionadas con los extremos y los comportamientos de operaciones afectan a las operaciones determinadas. 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. Un comportamiento de extremos, por otro lado, sólo controla los aspectos pertinentes a los extremos, como, por ejemplo, cómo y dónde encontrar una credencial de seguridad.
  • enlaces proporcionados por el sistema
    WCF incluye varios enlaces proporcionados por el sistema. Éstas son colecciones de elementos de enlace que se optimizan para escenarios concretos. Por ejemplo, el WSHttpBinding está diseñado para la interoperabilidad con servicios que implementan varias especificaciones WS - *. Estos enlaces predefinidos ahorran tiempo al presentar sólo las opciones que se pueden aplicar correctamente al escenario en cuestión. 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 puede realizarse mediante codificación, configuración o a mediante una combinación de ambos. La configuración tiene la ventaja de que permite a alguien que no sea el programador (por ejemplo, un administrador de redes) establecer parámetros de servicios y clientes después de que el código esté escrito y sin tener que volver a compilar. La configuración no sólo le permite establecer valores como direcciones de extremos, sino que también proporciona control adicional al permitirle agregar extremos, enlaces y comportamientos. La codificación permite al desarrollador retener un control estricto sobre todos los componentes del servicio o cliente, y cualquier ajuste realizado a través de la configuración se puede inspeccionar y, si fuese necesario, podría invalidarse mediante el código.
  • operación de servicio
    Una operación de servicio es un 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 de WCF. El método puede devolver un valor y puede tomar un número opcional de argumentos, o no tomar ningún argumento y no devolver ninguna respuesta. Por ejemplo, una operación que funciona como un simple "Hola" se puede utilizar para notificar acerca de la presencia de un cliente y para comenzar una serie de operaciones.
  • contrato de servicio
    El contrato de servicio une varias operaciones relacionadas en una unidad funcional única. El contrato puede definir ajustes de servicio, tales como el espacio de nombres del servicio, un contrato de devolución de llamada 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 elija y la aplicación del atributo ServiceContractAttribute a la interfaz. El código de servicio real resulta mediante la implementación de 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 define el contrato de servicio, se significa un contrato de operación mediante la aplicación del atributo OperationContractAttribute a cada definición de método que forma parte del contrato. Las operaciones se pueden modelar como tomar un mensaje único y devolver un mensaje único, o como tomar un conjunto de tipos y devolver un tipo. En el último caso, el sistema determinará el formato de los mensajes que han de intercambiarse para esa operación.
  • contrato de mensaje
    Un contrato de mensaje describe el formato de un mensaje. Por ejemplo, declara si los elementos del mensaje deberían ir en encabezados frente al cuerpo, qué nivel de seguridad debería aplicarse a qué elementos del mensaje, etc.
  • contrato de error
    Un contrato de error puede estar asociado a una operación de servicio para denotar errores que se pueden devolver al llamador. Una operación puede tener cero o más errores asociados a ella. Estos errores son errores de SOAP que se modelan como excepciones en el modelo de programación.
  • contrato de datos
    Los tipos de datos que utiliza un servicio se deben describir en metadatos para permitir a otros interoperar con el servicio. Las descripciones de los tipos de datos se conocen como el contrato de datos y los tipos se pueden utilizar en cualquier parte de un mensaje, por ejemplo, como parámetros o tipos de valores devueltos. Si el servicio sólo utiliza tipos simples, no hay ninguna necesidad de utilizar explícitamente contratos de datos.
  • alojamiento
    Un servicio se debe alojar en algún proceso. Un host es una aplicación que controla la duración del servicio. Los servicios pueden autoalojarse o un proceso de alojamiento existente puede administrarlos.
  • servicio autoalojado
    Un servicio autoalojado es aquel que se ejecuta dentro de una aplicación de proceso que el desarrollador creó. 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 alojamiento
    Un proceso de alojamiento es una aplicación que está diseñada para alojar servicios. Entre ellos se incluyen Internet Information Services (IIS), Windows Activation Services (WAS) y Windows Services. En estos escenarios alojados, el host controla la duración del servicio. Por ejemplo, mediante IIS puede preparar un directorio virtual que contenga el ensamblado de servicio y archivo de configuración. Cuando se recibe un mensaje, IIS inicia el servicio y controla su duración.
  • creación de instancias
    Un servicio tiene un modelo de creación de instancias. Hay tres modelos de creación de instancias: "único" en el que un objeto CLR único repara todos los clientes; "por llamada", en el que un nuevo objeto CLR se crea para administrar cada llamada de cliente; y "por sesión", en la que se crea un conjunto de objetos CLR, uno para cada sesión individual. Para elegir un modelo de creación de instancias se han de tener en cuenta los requisitos de aplicación y el patrón de uso esperado del servicio.
  • aplicación de cliente
    Una aplicación de cliente es un programa que intercambia mensajes con uno o más extremos. La aplicación de cliente comienza creando una instancia de un cliente de WCF y llamando métodos del cliente de WCF. Es importante tener en cuenta que una única aplicación pueda ser cliente y servicio.
  • canal
    Un canal es una 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. Hay por consiguiente, un canal asociado a cada elemento de enlace. Los canales se apilan uno sobre otro para crear la implementación concreta del enlace: la pila de canales.
  • cliente WCF
    Un cliente de WCF es una construcción de la aplicación cliente que expone las operaciones de servicio como métodos (en el lenguaje de programación .NET Framework de su elección, como Visual Basic o Visual C#). Cualquier aplicación puede alojar a un cliente de WCF, incluso una aplicación que aloje un servicio. Por consiguiente, es posible crear un servicio que incluya clientes de WCF de otros servicios.

    Un cliente de WCF se puede generar automáticamente utilizando ServiceModel Metadata Utility Tool (Svcutil.exe) y señalándolo hacia un servicio en ejecución que publique metadatos.

  • metadatos
    Los metadatos de un servicio describen las características del servicio que una entidad externo necesita entender para comunicarse con el servicio. ServiceModel Metadata Utility Tool (Svcutil.exe) puede utilizar los metadatos para generar un cliente de WCF y la configuración que lo acompaña que puede usar una aplicación cliente 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 documentos WSDL, que describe los métodos del servicio.

    Cuando se habilita, WCF genera automáticamente los metadatos para el servicio mediante la inspección del servicio y sus extremos. Para publicar los metadatos desde un servicio, debe permitir explícitamente al comportamiento de los metadatos.

  • seguridad
    La seguridad en WCF incluye confidencialidad (cifrado de mensajes para evitar las escuchas no autorizadas), integridad (los recursos para la detección de manipulación del mensaje), autenticación (los recursos para la validación de servidores y clientes) y autorización (el control del acceso a los recursos). Estas funciones se proporcionan mediante la reutilización de mecanismos de seguridad existentes, como TLS sobre HTTP (también conocido como HTTPS) o la implementación de una o más de las numerosas especificaciones de seguridad WS - *.
  • modo de seguridad de transporte
    La seguridad se puede proporcionar mediante uno de estos tres modos: modo de transporte, modo de seguridad de mensaje y transporte con modo de credencial de mensajes. El modo de seguridad de transporte especifica que los mecanismos de la capa de transporte (como HTTPS) proporcionan la confidencialidad, integridad y autenticación. Al utilizar un transporte como HTTPS, este modo tiene la ventaja de ser eficaz en su rendimiento y bien entendido debido a su predominio en Internet. La desventaja es que este tipo de seguridad se aplica por separado en cada salto en la ruta de comunicación, provocando que la comunicación sea susceptible a un ataque tipo “man in the middle”.
  • modo de seguridad de mensajes
    El modo de seguridad de mensajes especifica que la seguridad se proporciona mediante la implementación de una o más especificaciones de seguridad, como la especificación denominada "Seguridad de los servicios Web: seguridad de mensajes SOAP” (disponible en https://go.microsoft.com/fwlink/? LinkId=94684). Cada mensaje contiene los mecanismos necesarios para proporcionar la seguridad durante su tránsito y para permitir que los receptores detecten la manipulación y el descifrado de mensajes. En este sentido, la seguridad se encapsula dentro de cada mensaje, proporcionando una seguridad de extremo a extremo en varios saltos. Dado que la información de seguridad se vuelve parte del mensaje, también es posible de incluir varios tipos de credenciales con el mensaje (se las conoce como demandas). Este enfoque también tiene la ventaja de permitir al mensaje viajar de manera segura en cualquier transporte, incluidos varios transportes entre su origen y destino. La desventaja de este enfoque es la complejidad de los mecanismos de cifrado empleados, que afectan al rendimiento.
  • transporte con modo de seguridad de credencial de mensajes
    Este modo utiliza la capa de transporte para proporcionar la confidencialidad, autenticación e integridad de los mensajes, mientras que cada uno de los mensajes puede contener varias credenciales (demandas) requeridas por los receptores del mensaje.
  • WS-*
    Modo abreviado para el creciente conjunto de especificaciones de servicios Web (WS), tales como WS-Security, WS-ReliableMessaging, etc., que se implementan en WCF.

Consulte también

Conceptos

¿Qué es Windows Communication Foundation?
Arquitectura de Windows Communication Foundation
Arquitectura de seguridad