Visão geral de sessões confiáveis
As mensagens confiáveis SOAP do Windows Communication Foundation (WCF) fornecem confiabilidade de transferência de mensagens de ponta a ponta entre pontos de extremidade SOAP. Ele faz isso em redes que não são confiáveis, superando falhas de transporte e falhas de nível de mensagem SOAP. Em particular, ele fornece entrega baseada em sessão, única e (opcionalmente) ordenada para mensagens enviadas através de SOAP ou intermediários de transporte. A entrega baseada em sessão fornece o agrupamento de mensagens em uma sessão com ordenação opcional das mensagens.
Este tópico descreve sessões confiáveis, como e quando usá-las e como protegê-las.
Sessões confiáveis do WCF
As sessões confiáveis do WCF são uma implementação de mensagens confiáveis SOAP, conforme definido pelo protocolo WS-ReliableMessaging.
As mensagens confiáveis WCF SOAP fornecem uma sessão confiável de ponta a ponta entre dois pontos de extremidade, independentemente do número ou tipo de intermediários que separam os pontos de extremidade de mensagens. Isso inclui quaisquer intermediários de transporte que não usam SOAP (por exemplo, proxies HTTP) ou intermediários que usam SOAP (por exemplo, roteadores ou pontes baseados em SOAP) que são necessários para que as mensagens fluam entre os pontos de extremidade. Um canal de sessão confiável suporta comunicação interativa para que os serviços conectados por esse canal funcionem simultaneamente e troquem e processem mensagens em condições de baixa latência, ou seja, em intervalos de tempo relativamente curtos. Esse acoplamento significa que esses componentes progridem juntos ou falham juntos, portanto, não há isolamento entre eles.
Uma sessão confiável mascara dois tipos de falhas:
Falhas no nível de mensagem SOAP, que incluem mensagens perdidas ou duplicadas e mensagens que chegam em uma ordem diferente da ordem em que foram enviadas.
Falhas de transporte.
Uma sessão confiável implementa o protocolo WS-ReliableMessaging e uma janela de transferência na memória para mascarar falhas no nível de mensagem SOAP e restabelecer conexões no caso de falhas de transporte.
Uma sessão confiável fornece para mensagens SOAP o que o TCP fornece para pacotes IP. Uma conexão de soquete TCP fornece uma transferência singular e em ordem de pacotes IP entre nós. O canal confiável fornece o mesmo tipo de transferência confiável, mas difere da confiabilidade do soquete TCP das seguintes maneiras:
A confiabilidade está no nível de mensagem SOAP, não para um pacote de bytes de tamanho arbitrário.
A fiabilidade é neutra em termos de transporte, não apenas para transferência através de TCP.
A confiabilidade não está vinculada a uma sessão de transporte específica (por exemplo, a sessão fornecida por uma conexão TCP) e pode usar várias sessões de transporte simultânea ou sequencialmente ao longo da vida útil da sessão confiável.
A sessão confiável é entre os pontos de extremidade SOAP do emissor e do recetor, independentemente do número de conexões de transporte necessárias para a conectividade entre eles. Em resumo, a confiabilidade TCP termina onde a conexão de transporte termina, enquanto uma sessão confiável fornece confiabilidade de ponta a ponta.
Sessões e ligações fiáveis
Como mencionado anteriormente, uma sessão confiável é neutra em termos de transporte. Além disso, você pode estabelecer uma sessão confiável em vários padrões de troca de mensagens, como solicitação-resposta ou duplex. Uma sessão confiável do WCF é exposta como uma propriedade de um conjunto de associações.
Use uma sessão confiável em pontos de extremidade que usam:
Ligações padrão de transporte baseadas em HTTP:
WsHttpBinding
e expor contratos de solicitação-resposta ou unidirecional.Ao usar uma sessão confiável sobre uma solicitação-resposta ou um simples contrato de serviço unidirecional.
WsDualHttpBinding
e expor contratos duplex, solicitação-resposta ou unidirecional.WsFederationHttpBinding
e expor contratos de solicitação-resposta ou unidirecional.
Ligações padrão de transporte baseadas em TCP:
NetTcpBinding
e expor duplex, solicitar resposta ou contratos unidirecionais.
Use uma sessão confiável em quaisquer outras associações criando uma associação personalizada, como HTTPS (para obter mais informações sobre problemas, consulte Sessões confiáveis e segurança) ou uma vinculação de pipe nomeada.
Você pode empilhar uma sessão confiável em diferentes tipos de canais subjacentes, e a forma do canal de sessão confiável resultante varia. No cliente e no servidor, o tipo de canal de sessão confiável suportado depende do tipo de canal subjacente usado. A tabela a seguir lista os tipos de canais de sessão suportados no cliente como uma função do tipo de canal subjacente.
Tipos de canais de sessão confiáveis suportados† | IRequestChannel |
IRequestSessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IOutputSessionChannel |
Sim | Sim | Sim | Sim |
IRequestSessionChannel |
Sim | Sim | No | No |
IDuplexSessionChannel |
No | No | Sim | Sim |
†Os tipos de canal suportados são os valores disponíveis para o valor do parâmetro genérico TChannel
que é passado para o BuildChannelFactory<TChannel>(BindingContext) método.
A tabela a seguir lista os tipos de canais de sessão suportados no servidor como uma função do tipo de canal subjacente.
Tipos de canais de sessão fiáveis suportados‡ | IReplyChannel |
IReplySessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IInputSessionChannel |
Sim | Sim | Sim | Sim |
IReplySessionChannel |
Sim | Sim | No | No |
IDuplexSessionChannel |
No | No | Sim | Sim |
‡Os tipos de canal suportados são os valores disponíveis para o valor do parâmetro genérico TChannel
que é passado para o BuildChannelListener<TChannel>(BindingContext) método.
Sessões fiáveis e segurança
Garantir uma sessão confiável é importante para garantir que as partes comunicantes (serviço e cliente) sejam autenticadas e que as mensagens trocadas na sessão não sejam adulteradas. Além disso, é importante garantir a integridade de cada sessão individual confiável. Uma sessão confiável é protegida vinculando-a a um contexto de segurança representado e gerenciado por um canal de sessão de segurança. O canal de segurança fornece uma sessão de segurança. Os tokens de segurança trocados durante o estabelecimento da sessão são usados para proteger as mensagens na sessão confiável.
Quando uma sessão confiável está sobre TCP-S, a sessão TCP é vinculada à sessão confiável. Portanto, a segurança do transporte garante que a segurança também esteja ligada à sessão confiável. Nesse caso, o restabelecimento da conexão está desativado.
A única exceção é ao usar HTTPS. A sessão SSL (Secure Sockets Layer) não está vinculada à sessão confiável. Isso impõe uma ameaça porque as sessões que estão compartilhando um contexto de segurança (a sessão SSL) não estão protegidas umas das outras; Isso pode ou não ser uma ameaça real, dependendo do aplicativo.
Usando sessões confiáveis
Para usar sessões confiáveis do WCF, crie um ponto de extremidade com uma associação que ofereça suporte a uma sessão confiável. Use uma das associações fornecidas pelo sistema que o WCF fornece com a sessão confiável habilitada ou crie sua própria associação personalizada que faça isso.
As ligações definidas pelo sistema que suportam e habilitam uma sessão confiável por padrão incluem:
As associações fornecidas pelo sistema que suportam uma sessão confiável como opção, mas não habilitam uma por padrão, incluem:
Para obter um exemplo de como criar uma associação personalizada, consulte Como criar uma vinculação de sessão confiável personalizada com HTTPS.
Para obter uma discussão sobre associações WCF que oferecem suporte a sessões confiáveis, consulte Ligações fornecidas pelo sistema.
Quando usar sessões confiáveis
É importante entender quando usar sessões confiáveis em seu aplicativo. O WCF oferece suporte a sessões confiáveis entre pontos de extremidade que estão ativos e ativos ao mesmo tempo. Se seu aplicativo exigir que um dos pontos de extremidade fique indisponível por um período de tempo, use filas para obter confiabilidade.
Se o cenário exigir dois pontos de extremidade conectados por TCP, o TCP pode ser suficiente para fornecer trocas de mensagens confiáveis. No entanto, não é necessário usar uma sessão confiável, já que o TCP garante que os pacotes cheguem em ordem e apenas uma vez.
Se o seu cenário tem alguma das seguintes características, então você deve considerar seriamente o uso de uma sessão confiável.
Intermediários SOAP, como roteadores SOAP
Intermediários de procuração ou pontes de transporte
Conectividade intermitente
Sessões via HTTP