在真实场景中使用WSDualHttpBinding进行双工回调可以吗?比方说,我有一个使用随机端口的.NET应用程序,该服务是否能够解析客户端的基地址和回调端口?
发布于 2009-08-08 10:07:23
对您的问题的完整回答取决于“真实世界方案”是Intranet还是Internet方案。虽然WSDualHttpBinding在这两种情况下都可以工作,但有一些细节需要注意:
内部网
在Intranet方案中,WSDualHttpBinding将使用预配置的自定义端口与您的.NET应用程序一起工作,并且“是”该服务将能够为回调解析客户端的基地址和端口:具体方式如下所述。下面解释的原因是,WSDualHttpBinding主要是为互联网使用而设计的。
当您可以在客户端和服务器上使用WCF时,最好使用NetTcpBinding或NetNamedPipeBinding来实现内部网方案中的双工回调。这些绑定分别使用TCP和ICP作为传输(而不是HTTP)和自定义二进制编码,这就是为什么两端都需要WCF的原因。对于客户端回调,将重用用于通过绑定连接到服务的相同通道,而无需打开新端口。
互联网
在Internet场景中,有效的HTTP请求和响应只在一个方向上传输,HTTP被设计为单向协议。因此,当使用HTTP时,会为回调创建一个单独的WSDualHttpBinding通道。回答您的第二个问题:默认情况下,客户端回调的目标地址由客户机主机名和端口80组成。例如,如果客户端是一台开发机器,并且安装了IIS,则端口80在某些情况下将被独占保留,这将导致与您的原型应用程序冲突。这就是this blog post提供的解决方案,也是ClientBaseAddress属性的设计目的。无论您使用的端口是默认端口还是自定义端口,都必须确保两端的所有防火墙和路由器都配置正确,以允许建立传出通道和单独的回叫通道。
.NET应用程序也可以表示Silverlight应用程序。由于在浏览器中运行的Silverlight应用程序不能接受新的传入HTTP连接,因此带有独立反向通道的WSDualHttpBinding将无法工作。因此,PollingDuplexHttpBinding首先是在Silverlight2中创建的,这可以被认为是一个聪明的“技巧”,通过长时间(长轮询)保持请求通道的开放,并将其用作回调客户端的回调通道,来绕过HTTP是单向的事实。这对客户端和服务器端都有许多影响,特别是与伸缩相关的,有关更多详细信息,请参阅this post from my blog。
了解了你特定的“现实世界场景”和你的用例,希望这能帮助你找出正确的绑定来用于双工回调。
发布于 2008-09-12 19:08:02
如果它是防火墙后的应用程序,理论上是可以的。这取决于您所说的“真实世界”是什么意思;如果您所指的是“高性能”,也许NetTcpBinding是一个更好的应用程序。
https://stackoverflow.com/questions/59677
复制相似问题