使用WSDualHttpBinding进行双工回调是否适用于实际场景?说,我有一个使用随机端口的.NET应用程序,该服务是否能够解析客户端的基地址和端口以进行回调?
对您的问题的完整答案取决于"真实场景"是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将在某些情况下专门保留,这将导致与原型应用程序冲突.这是这个博客帖子提出了一个解决方案,什么ClientBaseAddress财产旨在帮助.无论您使用哪个端口 - 默认端口或自定义端口,都必须确保双方的所有防火墙和路由器都已正确配置,以允许建立传出通道和单独的回调通道.
.NET应用程序也可以表示Silverlight应用程序.由于在浏览器中运行的Silverlight应用程序无法接受新的传入HTTP连接,因此WSDualHttpBinding与其单独的反向通道将无法正常工作.因此PollingDuplexHttpBinding首先在Silverlight 2中创建,可以被认为是一个聪明的"技巧",通过长时间保持请求通道打开(长轮询)并将其用作后向通道来解决HTTP是单向的这一事实.回电给客户.这对客户端和服务器端都有很多影响,特别是与扩展有关,更多细节请参阅我的博客中的这篇文章.
通过了解您特定的"真实场景"和您的用例,希望这可以帮助您确定用于双工回调的正确绑定.