Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A comunicação confiável de mensagens SOAP do Windows Communication Foundation (WCF) garante a segurança da transferência de mensagens de ponta a ponta entre endpoints 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 do sistema de mensagens confiáveis SOAP, conforme definido pelo protocolo WS-ReliableMessaging.
O sistema de mensagens confiáveis WCF SOAP fornece uma sessão confiável de ponta a ponta entre dois endpoints, independentemente do número ou tipo de intermediários que os separam. 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 dá suporte à comunicação interativa para que os serviços conectados por esse canal sejam executados 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á 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 fornece para mensagens SOAP o que o TCP fornece para pacotes IP. Uma conexão de soquete TCP fornece uma transferência singular e ordenada de pacotes IP entre dispositivos. O canal confiável fornece o mesmo tipo de transferência confiável, mas é diferente da confiabilidade do soquete TCP das seguintes maneiras:
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 simultaneamente ou sequencialmente ao longo do tempo de vida da sessão confiável.
A sessão confiável ocorre entre os endpoints SOAP do remetente e do receptor, independentemente do número de conexões de transporte necessárias para a conectividade entre eles. Em suma, a confiabilidade do TCP termina onde a conexão de transporte termina, enquanto uma sessão confiável fornece 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 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:
Associações padrão de transporte baseadas em HTTP:
WsHttpBindinge 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.
WsDualHttpBindinge expor duplex, solicitação-resposta ou contratos unidirecionais.WsFederationHttpBindinge expor solicitação-resposta ou contratos unidirecionais.
Associações padrão de transporte baseadas em TCP:
NetTcpBindinge 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 suporte ao tipo de canal de sessão confiável depende do tipo de canal subjacente utilizado. 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 | Não |
IDuplexSessionChannel |
Não | Não | 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 BuildChannelFactory<TChannel>(BindingContext) método.
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 | Não |
IDuplexSessionChannel |
Não | Não | 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 BuildChannelListener<TChannel>(BindingContext) método.
Sessões confiáveis e segurança
Proteger 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 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 é 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 restabelecimento 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 impõe uma ameaça porque as sessões que estão compartilhando um contexto de segurança (a sessão SSL) não sã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 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 dão suporte e habilitam uma sessão confiável por padrão incluem:
As associações fornecidas pelo sistema que dão suporte a uma sessão confiável como uma 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 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 em seu aplicativo. O WCF dá suporte a sessões confiáveis entre endpoints que estão ativos e operantes 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. No entanto, não é 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ê deverá 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 via HTTP