关于wcf:WSDualHttpBinding用于双工回调

关于wcf:WSDualHttpBinding用于双工回调

WSDualHttpBinding for duplex callbacks

将WSDualHttpBinding用于双工回调在实际情况下是否可以工作? 说,我有一个使用随机端口的.NET应用程序,该服务是否能够解析客户端的基地址和用于回调的端口?


一个问题的完整答案取决于"实际场景"是Intranet还是Internet场景。尽管WSDualHttpBinding在两种情况下均可工作,但仍有一些细节需要注意:

内联网

WSDualHttpBinding将在Intranet方案中使用预配置的自定义端口与您的.NET应用程序配合使用,"是",该服务将能够解析客户端的基址和端口以进行回调:具体说明如下。下面解释的原因是WSDualHttpBinding主要设计用于Internet。

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

互联网

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

.NET应用程序也可以表示Silverlight应用程序。由于在浏览器中运行的Silverlight应用程序不能接受新的传入HTTP连接,因此带有其单独的后向通道的WSDualHttpBinding将不起作用。因此,PollingDuplexHttpBinding最初是在Silverlight 2中创建的,可以将其视为聪明的"窍门",以通过长时间保持请求通道开放(长时间轮询)并将其用作反向通道来解决HTTP是单向的这一事实。回拨给客户。这对客户端和服务器端都有很多影响,特别是与扩展有关。有关更多详细信息,请参阅我的博客中的这篇文章。

有了您特定的"实际情况"和用例的想法,希望这将帮助您确定正确的绑定以用于双工回调。


如果它是防火墙后面的应用程序,理论上是可以的。这取决于您所说的"现实世界";如果您的意思是"高性能",那么NetTcpBinding可能是更好的选择。


推荐阅读