用于双工回调的WSDualHttpBinding

时间:2008-09-12 18:18:37

标签: wcf callback duplex

使用WSDualHttpBinding进行双工回调是否适用于实际场景?比如,我有一个使用随机端口的.NET应用程序,该服务是否能够解析客户端的基地址和端口以进行回调?

2 个答案:

答案 0 :(得分:35)

对您的问题的完整答案取决于“真实场景”是Intranet还是Internet场景。尽管WSDualHttpBinding在两种情况下都有效,但有一些细节需要注意:

<强>内联网

WSDualHttpBinding将使用Intranet场景中的预配置自定义端口与您的.NET应用程序一起使用,并且“是”该服务将能够解析客户端的基本地址和端口以进行回调:具体如何解释如下。下面解释的原因是WSDualHttpBinding主要用于在Internet上使用。

当您可以在客户端和服务器上使用WCF时,Intranet方案中的双工回调最好通过使用NetTcpBinding或NetNamedPipeBinding来实现。这些绑定分别使用TCP和ICP作为传输(而不是HTTP)和自定义二进制编码,这就是双方都需要WCF的原因。对于回调客户端,重新使用通过Binding连接到服务的相同通道,而无需打开新端口。

<强>互联网

在Internet方案中,有效的HTTP请求和响应仅在一个方向上传输,HTTP被设计为单向协议。使用WSDualHttpBinding时,WCF会为回调创建一个单独的HTTP通道。回答第二个问题:默认情况下,回调客户端的目标地址由客户端计算机主机名和端口80组成。例如,如果客户端是开发计算机并且安装了IIS,则端口80将在某些情况下专门保留,这将导致与原型应用程序冲突。这是this blog post提供解决方案以及ClientBaseAddress属性旨在帮助的解决方案。无论您使用哪个端口 - 默认端口或自定义端口,都必须确保双方的所有防火墙和路由器都已正确配置,以允许建立传出通道和单独的回调通道。

.NET应用程序也可以表示Silverlight应用程序。由于在浏览器中运行的Silverlight应用程序无法接受新的传入HTTP连接,因此WSDualHttpBinding与其单独的反向通道将无法正常工作。因此PollingDuplexHttpBinding首先在Silverlight 2中创建,可以被认为是一个聪明的“技巧”,通过长时间保持请求通道打开(长轮询)并将其用作后向通道来解决HTTP是单向的这一事实。回电给客户。这对客户端和服务器端都有很多影响,尤其与缩放有关,有关详细信息,请参阅this post from my blog

了解您的特定“真实场景”和您的用例希望这有助于您确定用于双工回调的正确绑定。

答案 1 :(得分:2)

如果它是防火墙后面的应用程序,理论上是的。这取决于你对“现实世界”的意思;如果你的意思是“高性能”,也许NetTcpBinding是一个更好的appraoch。