2013-01-07 42 views
2

我打算使用wsDualHttpBinding为回调WCF服务。客户端将是一个Windows窗体应用程序,通过互联网与服务进行通信。显然,我无法控制客户端的防火墙,所以我想知道在客户端设置ClientBaseAddress的正确方法是什么?wsDualHttpBinding客户端地址和防火墙

现在在我intiial测试我跑在同一台PC上的服务和客户端,我设置如下

Dim binding As System.ServiceModel.WSDualHttpBinding = Struct.Endpoint.Binding 
binding.ClientBaseAddress = New Uri("http://localhost:6667") 

结合,但我有一种感觉,这是不行的部署过当因为“本地主机”不会转换为机器地址(更不用担心NAT转换),并且该端口可能会被客户端防火墙阻止。

处理远程客户端回调的基地址的正确方法是什么?

有人告诉我,如果我没有指定ClientBaseAddress,那么WCF基础结构在端口80处创建默认客户端基地址,该地址用于服务的传入连接。由于端口80通常对防火墙开放,因此应该正常工作。

所以告诉我什么时候赢得表格wcf客户端应用程序将运行然后我怎样才能打开我的自定义端口,如“6667”,也指导我什么库或什么方法我应该使用作为结果响应应该来自客户端路由器 到PC和防火墙不会阻止任何东西。请与现实生活场景讨论这个问题,人们如何处理现实生活中的这种情况。谢谢

回答

4

正确的方法是使用TCP传输而不是HTTP传输。通过HTTP的双工通信需要两个HTTP连接 - 一个从客户端到服务器打开(没关系),另一个从服务器打开到客户端。这只能在您完全控制两端的情况下使用。根本就不能仅仅通过猜测喜欢用什么样的地址来避免过多的并发症:

  • 本地Windows或第三方防火墙必须配置
  • 许可应用程序运行 - 监听HTTP是不允许的默认情况下,除非UAC被关闭或应用程序以管理员身份运行。您必须允许通过netsh或httpcfg(Windows XP和2003)监听端口 - 这又需要管理员权限。
  • 端口已被其他应用程序使用。在80的情况下,它可以被任何本地Web服务器使用 - 例如IIS。
  • 专用网络和网络设备 - 如果您的客户端机器位于NAT之后,则必须配置端口转发,但是如果您有两台机器在同一专用网络上运行应用程序,该怎么办?您不能从同一个传入端口转发到两台机器。

所有这些问题都可以避免,只有当您控制整个基础设施。这就是为什么HTTP双工通信主要用于Intranet场景的原因,以及为什么例如Silverlight提供了另一个实现,其中未创建第二个连接,Silverlight客户端连续轮询服务器以检查是否存在任何回调。

TCP传输只需要从客户端到服务器的单一连接,因为TCP协议本地双工,因此服务器可以通过相同的连接回拨客户端。部署公共服务时,通常可以控制服务器端的基础架构,以便您可以对配置进行必要的更改以使其可用。

我想这也回答了您的previous question

+1

所以ü意味着它是不可能的,如果我开发一个双工通信服务与WSDualHttp在IIS绑定主办,一个窗口形成客户端和客户端分发到任何客户。客户将连接到我们的服务和回调发生在客户端。我希望我们可以通过编程方式打开端口并在服务器端设置端口转发。所以建议我如何做到这一点。感谢 – Thomas

+0

你无法控制从服务器的客户端配置(端口转发,打开端口等)。 –

+2

我没有说从服务器来控制,而我们可以在客户端应用程序编写代码以打开port.just告诉我,我需要从客户端启用端口转发太像服务器端? – Thomas