Información general de sesiones confiables

La mensajería confiable SOAP de Windows Communication Foundation (WCF) proporciona confiabilidad de transferencia de mensajes de un extremo a otro entre los puntos de conexión SOAP. Hace esto en redes que no son confiables superando errores de transporte y errores del nivel de mensajes SOAP. En particular, proporciona una entrega basada en sesión, individual y (opcionalmente) ordenada de mensajes enviados a través de intermediarios de transporte o SOAP. La entrega basada en sesión permite agrupar mensajes en una sesión con ordenación opcional de los mensajes.

En este tema se describen sesiones confiables, cómo y cuándo usarlas y cómo protegerlas.

Sesiones confiables WCF

Las sesiones confiables WCF son una implementación de mensajería confiable SOAP tal y como la define el protocolo WS-ReliableMessaging.

La mensajería confiable SOAP WCF proporciona una sesión confiable de un extremo a otro entre dos puntos de conexión, sin tener en cuenta el número o tipo de intermediarios que separan los puntos de conexión de la mensajería. Esto incluye cualquier intermediario de transporte que no use SOAP (por ejemplo, los servidores proxy HTTP) o los intermediarios que usen SOAP (por ejemplo, los puentes o enrutadores basados en SOAP), que son necesarios para que los mensajes fluyan entre los puntos de conexión. Un canal de sesión confiable admite la comunicación interactiva para que los servicios que están conectados mediante este tipo de canal se ejecuten de forma simultánea e intercambien y procesen mensajes en condiciones de latencia baja, es decir, en intervalos de tiempo relativamente cortos. Este acoplamiento significa que estos componentes progresan o producen errores de forma conjunta, de modo que no hay ningún aislamiento proporcionado entre ellos.

Una sesión confiable enmascara dos tipos de errores:

  • Errores del nivel del mensaje de SOAP, que incluyen mensajes perdidos o duplicados y mensajes que llegan en un orden diferente del orden en el que se enviaron.

  • Errores de transporte.

Una sesión confiable implementa el protocolo WS-ReliableMessaging y una ventana de transferencia en memoria para enmascarar errores del nivel de mensaje de SOAP y restablece las conexiones en caso de errores de transporte.

Una sesión confiable proporciona para los mensajes SOAP lo que el TCP proporciona para los paquetes de IP. Una conexión de socket de TCP proporciona una transferencia única, en orden de paquetes IP entre nodos. El canal confiable proporciona el mismo tipo de transferencia confiable, pero difiere de la confiabilidad de socket de TCP de las siguientes maneras:

  • La confiabilidad se produce en el nivel de mensaje de SOAP, no para un paquete de tamaño aleatorio de bytes.

  • La confiabilidad es neutra para el transporte, no solo para la transferencia a través de TCP.

  • La confiabilidad no está ligada a una sesión de transporte determinada (por ejemplo, la sesión que proporciona una conexión TCP) y puede usar varias sesiones de transporte de forma simultánea o secuencial durante la duración de la sesión confiable.

  • La sesión confiable se produce entre los puntos de conexión SOAP de envío y recepción, independientemente del número de conexiones de transporte requerido para la conectividad entre ellos. En resumen, la confiabilidad TCP finaliza donde lo hace la conexión de transporte, mientras que una sesión confiable proporciona confiabilidad de un extremo a otro.

Enlaces y sesiones confiables

Como se ha mencionado anteriormente, una sesión confiable es neutra para el transporte. Además, se puede establecer una sesión confiable sobre muchos patrones de intercambio de mensajes, como solicitud-respuesta o dúplex. La sesión confiable WCF se expone como una propiedad de un conjunto de enlaces.

Puede usar una sesión confiable en puntos de conexión que utilicen:

  • Enlaces estándar de transporte basado en HTTP:

    • WsHttpBinding y exponen contratos de solicitud-respuesta o unidireccionales.

    • Cuando se usa una sesión confiable sobre un contrato de servicio de solicitud-respuesta o unidireccional simple.

    • WsDualHttpBinding y exponen contratos dúplex, de solicitud-respuesta o unidireccionales.

    • WsFederationHttpBinding y exponen contratos de solicitud-respuesta o unidireccionales.

  • Enlaces estándar de transporte basado en TCP:

    • NetTcpBinding y exponen contratos dúplex, de solicitud-respuesta o unidireccionales.

También puede usar una sesión confiable en cualquier otro enlace mediante la creación de un enlace personalizado, como HTTPS (para obtener más información sobre los problemas, consulte Sesiones confiables y seguridad) o un enlace de canalización con nombre.

Una sesión confiable se puede espaciar en diferentes tipos de canales subyacentes y la forma del canal de sesión confiable resultante varía. Tanto en el cliente como en el servidor, el tipo de canal de sesión confiable que se admite depende del tipo de canal subyacente que se usa. La siguiente tabla enumera los tipos de canales de sesión admitidos en el cliente como una función del tipo de canal subyacente.

Tipos de canales de sesión confiables admitidos† IRequestChannel IRequestSessionChannel IDuplexChannel IDuplexSessionChannel
IOutputSessionChannel
IRequestSessionChannel No N.º
IDuplexSessionChannel N.º No

†Los tipos de canal que se admiten son los valores disponibles para el valor del parámetro TChannel genérico que se pasa al método BuildChannelFactory<TChannel>(BindingContext).

La siguiente tabla enumera los tipos de canales de sesión admitidos en el servidor como una función del tipo de canal subyacente.

Tipos de canales de sesión confiables que se admiten‡ IReplyChannel IReplySessionChannel IDuplexChannel IDuplexSessionChannel
IInputSessionChannel
IReplySessionChannel No N.º
IDuplexSessionChannel N.º No

†Los tipos de canal que se admiten son los valores disponibles para el valor del parámetro TChannel genérico que se pasa al método BuildChannelListener<TChannel>(BindingContext).

Sesiones confiables y seguridad

Es importante proteger una sesión confiable para garantizar que se autentiquen los elementos que se comunican (servicio y cliente) y que los mensajes que se intercambian en la sesión no se alteran. Además, es importante para garantizar la integridad de cada sesión confiable individual. Una sesión confiable se protege cuando se enlaza a un contexto de seguridad que se representa y administra mediante un canal de sesión de seguridad. El canal de seguridad proporciona una sesión de seguridad. Los tokens de seguridad intercambiados durante el establecimiento de la sesión se utilizan a continuación para proteger los mensajes de la sesión confiable.

Cuando una sesión confiable es a través de TCP-S, la sesión TCP está vinculada a la sesión confiable. Por lo tanto, la seguridad de transporte garantiza que la seguridad también esté vinculada a la sesión confiable. En este caso, se desactiva el restablecimiento de la conexión.

La única excepción se produce al utilizar HTTPS. La sesión de capa de sockets seguros (SSL) no está enlazada a la sesión confiable. Esto supone una amenaza, ya que las sesiones que comparten un contexto de seguridad (la sesión SSL) no se protegen unas de otras; esto puede o no constituir una amenaza real en función de la aplicación.

Uso de sesiones confiables

Para usar sesiones confiables WCF, cree un punto de conexión con un enlace que admita una sesión confiable. Use uno de los enlaces del sistema que WCF proporciona con la sesión confiable habilitada o bien cree un enlace personalizado que lo haga.

Los enlaces definidos por el sistema que admiten y permiten de forma predeterminada una sesión confiable incluyen:

Los enlaces que proporciona el sistema que admiten una sesión confiable como opción, pero no habilitan una de forma predeterminada, incluyen:

Para obtener un ejemplo del procedimiento para crear un enlace personalizado, consulte Procedimiento para crear un enlace de sesión confiable personalizado con HTTPS.

Para obtener una explicación de los enlaces WCF que admiten sesiones confiables, consulte Enlaces que proporciona el sistema.

Cuándo usar sesiones confiables

Es importante entender cuándo se deben usar sesiones confiables en la aplicación. WCF admite sesiones confiables entre los puntos de conexión que están activos y funcionan al mismo tiempo. Si la aplicación necesita que uno de los puntos de conexión no esté disponible durante un tiempo, puede usar las colas para lograr la confiabilidad.

Si el escenario necesita dos puntos de conexión conectados a través de TCP, es posible que TCP sea suficiente para proporcionar intercambios de mensajes confiables. Sin embargo, no es necesario usar una sesión confiable, ya que TCP garantiza que los paquetes lleguen en orden y solo una vez.

Si el escenario tiene alguna de las siguientes características, debe considerar seriamente el uso de una sesión confiable.

  • Intermediarios SOAP, como enrutadores SOAP

  • Intermediarios proxy o puentes de transporte

  • Conectividad intermitente

  • Sesiones sobre HTTP

Consulte también