Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La mensajería confiable SOAP de Windows Communication Foundation (WCF) proporciona confiabilidad de transferencia de mensajes de un extremo a otro entre puntos de conexión SOAP. Lo hace en redes que no son confiables superando los errores de transporte y los errores de nivel de mensaje 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 proporciona la agrupación de mensajes en una sesión con un orden opcional de los mensajes.
En este tema se describen las sesiones confiables, cómo y cuándo usarlas y cómo protegerlas.
Sesiones confiables de WCF
Las sesiones confiables de WCF son una implementación de mensajería confiable SOAP tal como se define en el protocolo WS-ReliableMessaging.
La mensajería confiable SOAP de WCF proporciona una sesión confiable de un extremo a otro entre dos puntos de conexión, independientemente del número o tipo de intermediarios que separan los puntos de conexión de mensajería. Esto incluye los intermediarios de transporte que no usan SOAP (por ejemplo, servidores proxy HTTP) o intermediarios que usan SOAP (por ejemplo, enrutadores o puentes basados en SOAP) 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 conectados por dicho canal se ejecuten simultáneamente y intercambie y procesen mensajes en condiciones de baja latencia, es decir, en intervalos de tiempo relativamente cortos. Este acoplamiento significa que estos componentes progresan juntos o fallan, por lo que no hay ningún aislamiento proporcionado entre ellos.
Una sesión confiable enmascara dos tipos de errores:
Errores de nivel de mensaje 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 de nivel de mensaje SOAP y restablecer las conexiones en caso de errores de transporte.
Una sesión confiable proporciona para los mensajes SOAP lo que TCP proporciona para los paquetes IP. Una conexión de socket TCP proporciona una transferencia singular y ordenada de paquetes IP entre nodos. El canal confiable proporciona el mismo tipo de transferencia confiable, pero difiere de la confiabilidad del socket TCP de las maneras siguientes:
La confiabilidad está en el nivel de mensaje SOAP, no para un paquete de bytes de tamaño arbitrario.
La confiabilidad es neutra respecto al transporte, no solo para la transferencia a través de TCP.
La confiabilidad no está vinculada 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 simultáneas o secuenciales durante la duración de la sesión confiable.
La sesión confiable está entre los puntos de conexión SOAP de remitente y receptor, independientemente del número de conexiones de transporte necesarias para la conectividad entre ellos. En resumen, la confiabilidad de TCP termina donde finaliza la conexión de transporte, mientras que una sesión confiable proporciona confiabilidad de un extremo a otro.
Enlaces y sesiones confiables
Como se indicó anteriormente, una sesión confiable es neutra respecto al transporte. Además, puede establecer una sesión fiable utilizando diversos tipos de intercambio de mensajes, como los patrones de solicitud-respuesta o dúplex. La sesión confiable WCF se expone como una propiedad de un conjunto de enlaces.
Use una sesión confiable en los puntos de conexión que usan:
Enlaces estándar de transporte basados en HTTP:
WsHttpBinding
y presentan contratos de solicitud-respuesta o contratos 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 presentan contratos de solicitud-respuesta o contratos unidireccionales.
Enlaces estándar de transporte basados en TCP:
-
NetTcpBinding
y exponen contratos dúplex, de solicitud-respuesta o unidireccionales.
-
Use 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 admitido depende del tipo de canal subyacente usado. En la tabla siguiente se enumeran los tipos de canales de sesión admitidos en el cliente como función del tipo de canal subyacente.
Tipos de canal de sesión confiables admitidos† | IRequestChannel |
IRequestSessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IOutputSessionChannel |
Sí | Sí | Sí | Sí |
IRequestSessionChannel |
Sí | Sí | No | No |
IDuplexSessionChannel |
No | No | Sí | Sí |
†Los tipos de canal admitidos son los valores disponibles para el valor de parámetro genérico TChannel
que se pasa al BuildChannelFactory<TChannel>(BindingContext) método .
En la tabla siguiente se enumeran los tipos de canales de sesión admitidos en el servidor como función del tipo de canal subyacente.
Tipos de canal de sesión confiables admitidos** | IReplyChannel |
IReplySessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IInputSessionChannel |
Sí | Sí | Sí | Sí |
IReplySessionChannel |
Sí | Sí | No | No |
IDuplexSessionChannel |
No | No | Sí | Sí |
Los tipos de canal admitidos son los valores disponibles para el valor de parámetro genérico TChannel
que se pasa al método BuildChannelListener<TChannel>(BindingContext).
Sesiones confiables y seguridad
Es importante proteger una sesión confiable para asegurarse de que las partes de comunicación (servicio y cliente) se autentican y que los mensajes intercambiados en la sesión no se manipulan. Además, es importante garantizar la integridad de cada sesión individual y confiable. Una sesión confiable está protegida mediante el enlace a un contexto de seguridad representado y administrado por 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 usan para proteger los mensajes en la sesión confiable.
Cuando una sesión confiable se realiza 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 re-establecimiento de la conexión.
La única excepción es cuando se usa HTTPS. La sesión de capa de sockets seguros (SSL) no está enlazada a la sesión confiable. Esto impone una amenaza porque las sesiones que comparten un contexto de seguridad (la sesión SSL) no están protegidas entre sí; esto podría ser o no una amenaza real en función de la aplicación.
Uso de sesiones confiables
Para usar sesiones confiables de WCF, cree un extremo con una vinculación que admita una sesión confiable. Use uno de los enlaces proporcionados por el sistema que WCF proporciona con la sesión confiable habilitada o cree su propio enlace personalizado que lo haga.
Los enlaces definidos por el sistema que admiten y habilitan una sesión confiable de forma predeterminada incluyen:
Los enlaces proporcionados por el sistema que admiten una sesión confiable como opción, pero que no habilitan uno de forma predeterminada incluyen:
Para obtener un ejemplo de cómo crear un enlace personalizado, consulte How to: Create a Custom Reliable Session Binding with HTTPS (Cómo: Crear un enlace de sesión confiable personalizado con HTTPS).
Para obtener una explicación de los enlaces WCF que admiten sesiones confiables, consulte System-Provided Enlaces.
Cuándo usar sesiones confiables
Es importante comprender cuándo usar sesiones confiables en la aplicación. WCF admite sesiones confiables entre puntos de conexión que están activos y disponibles al mismo tiempo. Si la aplicación requiere que uno de los puntos de conexión no esté disponible durante un período de tiempo, use colas para lograr confiabilidad.
Si el escenario requiere dos puntos de conexión conectados a través de TCP, es posible que TCP sea suficiente para proporcionar intercambios de mensajes confiables. Aunque no es necesario usar una sesión confiable, ya que TCP garantiza que los paquetes llegan 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 a través de HTTP