Visão geral de sessões confiáveis
O sistema de mensagens confiáveis SOAP do Windows Communication Foundation (WCF) oferece 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 ao superar falhas de transporte e falhas no nível da mensagem SOAP. Em particular, ele fornece entrega ordenada, única e (opcionalmente) baseada em sessão para mensagens enviadas por meio 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.
O sistema de mensagens confiáveis SOAP do WCF oferece uma sessão confiável de ponta a ponta entre dois pontos de extremidade, com qualquer número ou tipo de intermediários que separam os pontos de extremidade de mensagens. Isso inclui todos os intermediários de transporte que não usam SOAP (por exemplo, proxies HTTP) ou intermediários que usam SOAP (por exemplo, roteadores baseados em SOAP ou pontes) que são necessários para que as mensagens fluam entre os pontos de extremidade. Um canal de sessão confiável permite comunicação interativa para que os serviços conectados por esse canal sejam executados simultaneamente e troquem e processem mensagens sob condições de baixa latência, ou seja, em intervalos relativamente curtos de tempo. Esse acoplamento significa que esses componentes progridem juntos ou falham juntos, portanto, não há nenhum isolamento fornecido entre eles.
Uma sessão confiável mascara dois tipos de falhas:
Falhas no nível da 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 da mensagem SOAP e restabelece conexões no caso de falhas de transporte.
Uma sessão confiável oferece para mensagens SOAP o que o TCP oferece para pacotes IP. Uma conexão de soquete TCP fornece uma transferência singular em ordem de pacotes IP entre nós. O canal confiável fornece o mesmo tipo de transferência confiável, mas tem as seguintes diferenças em relação à confiabilidade de soquete TCP:
A confiabilidade está no nível da mensagem SOAP, não para um pacote de bytes de tamanho arbitrário.
A confiabilidade é neutra em termos de transporte, não apenas para transferência por TCP.
A confiabilidade não está vinculada a uma sessão de transporte específica (por exemplo, a sessão que uma conexão TCP fornece) e pode usar várias sessões de transporte simultânea ou sequencialmente durante o tempo de vida da sessão confiável.
A sessão confiável é entre os pontos de extremidade SOAP do remetente e do receptor, com qualquer número de conexões de transporte necessárias para conectividade entre eles. Em suma, a confiabilidade do TCP termina onde a conexão de transporte termina, enquanto uma sessão confiável oferece confiabilidade de ponta a ponta.
Sessões e associações confiáveis
Conforme mencionado anteriormente, uma sessão confiável é neutra em termos de transporte. Além disso, você pode estabelecer uma sessão confiável em muitos 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:
Associações padrão de transporte baseadas em HTTP:
WsHttpBinding
e expor solicitação-resposta ou contratos unidirecionais.Ao usar uma sessão confiável em um contrato de serviço unidirecional ou de resposta de solicitação.
WsDualHttpBinding
e expor duplex, solicitação-resposta ou contratos unidirecionais.WsFederationHttpBinding
e expor solicitação-resposta ou contratos unidirecionais.
Associações padrão de transporte baseadas em TCP:
NetTcpBinding
e expor duplex, solicitação-resposta ou contratos unidirecionais.
Use uma sessão confiável em qualquer outra associação criando uma associação personalizada, como HTTPS (para obter mais informações sobre problemas, consulte Sessões confiáveis e segurança) ou uma associação de pipe nomeada.
Você pode empilhar uma sessão confiável em diferentes tipos de canal subjacentes e a forma de canal de sessão confiável resultante varia. No cliente e no servidor, o tipo de canal de sessão confiável com suporte depende do tipo de canal subjacente usado. A tabela a seguir lista os tipos de canais de sessão com suporte no cliente como uma função do tipo de canal subjacente.
Tipos de canal de sessão confiáveis com suporte† | IRequestChannel |
IRequestSessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IOutputSessionChannel |
Sim | Sim | Sim | Sim |
IRequestSessionChannel |
Sim | Sim | Não | No |
IDuplexSessionChannel |
No | No | Sim | Sim |
†Os tipos de canal com suporte são os valores disponíveis para o valor de parâmetro genérico TChannel
que é passado para o método BuildChannelFactory<TChannel>(BindingContext).
A tabela a seguir lista os tipos de canais de sessão com suporte no servidor como uma função do tipo de canal subjacente.
Tipos de canal de sessão confiáveis com suporte‡ | IReplyChannel |
IReplySessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IInputSessionChannel |
Sim | Sim | Sim | Sim |
IReplySessionChannel |
Sim | Sim | Não | No |
IDuplexSessionChannel |
No | No | Sim | Sim |
‡Os tipos de canal com suporte são os valores disponíveis para o valor de parâmetro genérico TChannel
que é passado para o método BuildChannelListener<TChannel>(BindingContext).
Sessões e associações confiáveis
Proteger uma sessão confiável é importante para garantir que as partes comunicativas (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 confiável individual. Uma sessão confiável é protegida associando-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 é sobre TCP-S, a sessão TCP está vinculada à sessão confiável. Portanto, a segurança do transporte garante que a segurança também esteja vinculada à sessão confiável. Nesse caso, o novo estabelecimento de conexão está desativado.
A única exceção é ao usar HTTPS. A sessão do protocolo SSL (Secure Sockets Layer) não está associada à sessão confiável. Isso representa uma ameaça porque as sessões que compartilham um contexto de segurança (a sessão SSL) não são protegidas umas das outras e isso pode ou não ser uma ameaça real dependendo do aplicativo.
Sessões confiáveis do WCF
Para usar sessões confiáveis do WCF, crie um ponto de extremidade com uma associação que permita 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 associações definidas pelo sistema que permitem e habilitam uma sessão confiável por padrão incluem:
As associações fornecidas pelo sistema que permitem uma sessão confiável como uma opção, mas não habilitam uma por padrão, incluem:
Para ver um exemplo de como criar uma associação personalizada, consulte Como criar uma associação de sessão confiável personalizada com HTTPS.
Para ver uma discussão sobre associações WCF que permitem sessões confiáveis, consulte Associações fornecidas pelo sistema.
Quando usar sessões confiáveis
É importante entender quando usar sessões confiáveis no seu aplicativo. O WCF permite sessões confiáveis entre pontos de extremidade ativos e ativos ao mesmo tempo. Se o aplicativo exigir que um dos pontos de extremidade fique indisponível por um período, use filas para obter confiabilidade.
Se o cenário exigir dois pontos de extremidade conectados por TCP, o TCP poderá ser suficiente para fornecer trocas de mensagens confiáveis. Apesar de que não seja necessário usar uma sessão confiável, pois o TCP garante que os pacotes cheguem em ordem e apenas uma vez.
Se o cenário tiver alguma das seguintes características, você precisará considerar seriamente o uso de uma sessão confiável.
Intermediários SOAP, como roteadores SOAP
Intermediários proxy ou pontes de transporte
Conectividade intermitente
Sessões por HTTP