Funcionamento do WSDualHttpBinding no cliente


Uma das possibilidades dentro do WCF é a capacidade que o serviço tem de invocar um callback para o cliente, permitindo que este método client-side seja executado e, conseqüentemente, o cliente possa interagir com o serviço, simulando os tradicionais eventos.

Nativamente os bindings NetTcpBinding e NetNamedPipeBinding fazem isso nativamente, devido aos respectivos protocolos utilizados. Além desses, há um binding chamado do WSDualHttpBinding que tem essa mesma finalidade mas, como o próprio nome diz, utilizando o protocolo HTTP. A imagem abaixo ilustra esse processo acontecendo entre o cliente e o serviço:

Quando você faz o uso do WSDualHttpBinding, o WCF utilizará um canal diferente para invocar o callback. Internamente, o que acaba sendo feito do lado do cliente – por parte do runtime do WCF – é a criação de um “endpoint” (incluindo uma porta disponível) para que o serviço relacionado consiga invocá-lo. Esse endereço temporário criado pelo WCF, é registrado sob o Http.sys (mais detalhes aqui) que é um componente de baixo nível e que faz parte do sistema de comunicação do Windows. Sendo assim, qualquer requisição que chegar para esse “endpoint”, o Http.sys encaminhará para o runtime do WCF que, finalmente, irá disparar a classe que implementa a interface de callback que, por sua vez, foi fornecida pelo contrato do serviço.

Finalmente, todo esse processo ocorre de forma transparente, permitindo que aplicações distribuídas, rodando como cliente WCF, possam disponibilizar um ponto de comunicação para essa interação.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s