Pergunta

O uso de WSDualHttpBinding para retornos de chamada duplex funcionaria em cenários do mundo real?Digamos que eu tenha um aplicativo .NET que usa uma porta aleatória. O serviço seria capaz de resolver os endereços base e a porta do cliente para retornos de chamada?

Foi útil?

Solução

Uma resposta completa à sua pergunta depende de o "cenário do mundo real" ser um cenário de intranet ou de Internet.Embora WSDualHttpBinding funcione em ambos os cenários, há detalhes específicos a serem observados:

Intranet

WSDualHttpBinding funcionará com seu aplicativo .NET usando uma porta personalizada pré-configurada em um cenário de intranet e "Sim" o serviço será capaz de resolver os endereços base e a porta do cliente para retornos de chamada:exatamente como é explicado abaixo.A razão pela qual é explicado abaixo é que WSDualHttpBinding foi projetado principalmente para ser usado na Internet.

Retornos de chamada duplex em um cenário de intranet, quando você pode usar o WCF no cliente e no servidor, são melhor alcançados usando NetTcpBinding ou NetNamedPipeBinding.Essas ligações usam TCP e ICP respectivamente como transporte (em vez de HTTP) e uma codificação binária personalizada, razão pela qual o WCF é necessário em ambos os lados.Para retorno de chamada ao cliente, o mesmo canal usado para conectar-se ao Serviço por meio do Binding é reutilizado sem a necessidade de abertura de uma nova porta.

Internet

Em um cenário de Internet, solicitações e respostas HTTP válidas viajam apenas em uma direção, o HTTP é projetado como um protocolo unidirecional.Ao usar o WSDualHttpBinding, o WCF cria um canal HTTP separado para retornos de chamada.Em resposta à sua segunda pergunta:o endereço de destino para esse retorno de chamada para o cliente é composto pelo nome do host da máquina cliente e pela porta 80 por padrão.Se o cliente for uma máquina de desenvolvimento por exemplo e tiver o IIS instalado, a porta 80 será reservada exclusivamente em alguns cenários o que causará conflitos com sua aplicação protótipo.Isso é o que esta postagem do blog apresenta uma solução e para que a propriedade ClientBaseAddress foi projetada para ajudar.Independentemente de qual porta você usa - a padrão ou personalizada, você deve garantir que todos os firewalls e roteadores em ambos os lados estejam configurados corretamente para permitir que o canal de saída e o canal de retorno de chamada separado sejam estabelecidos.

Um aplicativo .NET também pode denotar um aplicativo Silverlight.Devido ao fato de um aplicativo Silverlight executado em um navegador não poder aceitar novas conexões HTTP de entrada, WSDualHttpBinding com seu canal traseiro separado não funcionará.Conseqüentemente, PollingDuplexHttpBinding foi criado primeiro no Silverlight 2, o que pode ser considerado um 'truque' inteligente para contornar o fato de que o HTTP é unidirecional, mantendo o canal de solicitação aberto por um longo tempo (long polling) e usando-o como um canal de retorno para liga de volta para o cliente.Isso tem uma série de implicações tanto no lado do cliente quanto no lado do servidor, particularmente relevantes para o dimensionamento. Para obter mais detalhes, consulte esta postagem do meu blog.

Com uma ideia do seu "cenário do mundo real" específico e dos seus casos de uso, esperamos que isso ajude você a descobrir a ligação correta a ser usada para retornos de chamada duplex.

Outras dicas

Se for um aplicativo protegido por firewall, teoricamente sim.Depende do que você entende por “mundo real”;se com isso você quer dizer "alto desempenho", talvez o NetTcpBinding seja uma abordagem melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top