【发布时间】:2011-11-01 17:56:41
【问题描述】:
据我了解,在 HTTP 中,客户端连接到服务器并请求数据。服务器无法调用客户端。如果是这种情况,那么 WCF 回调如何工作?
谢谢,
乔
【问题讨论】:
据我了解,在 HTTP 中,客户端连接到服务器并请求数据。服务器无法调用客户端。如果是这种情况,那么 WCF 回调如何工作?
谢谢,
乔
【问题讨论】:
当与 HTTP 传输一起使用时,服务器确实调用客户端。为了使其正常工作,客户端必须位于公共端点上,因此需要适当配置防火墙和您拥有的东西。
来自http://msdn.microsoft.com/en-us/magazine/cc163537.aspx:
由于其无连接特性,HTTP 不能用于回调,因此您不能通过 BasicHttpBinding 或 WSHttpBinding 使用回调。 Windows Communication Foundation 为 NetTcpBinding 和 NetNamedPipeBinding 提供回调支持,因为底层传输是双向的。为了支持 HTTP 回调,Windows Communication Foundation 提供了 WSDualHttpBinding,它实际上设置了两个 HTTP 通道:一个用于从客户端到服务的调用,一个用于从服务到客户端的调用。
来自 WSDualHttpBinding 的参考资料 http://msdn.microsoft.com/en-us/library/system.servicemodel.wsdualhttpbinding.aspx:
此绑定要求客户端具有为服务提供回调端点的公共 URI。这是由 ClientBaseAddress 提供的。双重绑定将客户端的 IP 地址暴露给服务。客户端应该使用安全机制来确保它只连接到它信任的服务。
【讨论】:
WCF Duplex HTTP 客户端(例如,当使用wsDualHttpBinding 时)也会启动服务器,以便在“真实”服务器回调时监听请求。
所以这在 NAT 上不起作用,仅举一例。
【讨论】: