WSDualHttpBinding用于双工回调
在实际情况下,将WSDualHttpBinding用于双工回调是否可以工作?说,我有一个使用随机端口的.NET应用程序,该服务是否能够解析客户端的基址和用于回调的端口?
解决方案
回答
如果它是防火墙后面的应用程序,那么从理论上讲是可以的。这取决于我们所说的"现实世界"。如果意思是"高性能",那么NetTcpBinding可能是更好的选择。
回答
一个问题的完整答案取决于"实际场景"是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是单向的这一事实。回拨给客户。这对客户端和服务器端都有很多影响,特别是与扩展有关。有关更多详细信息,请参阅我的博客中的这篇文章。
有了我们特定的"实际场景"和用例的想法,这将有助于我们确定正确的绑定以用于双工回调。