【问题标题】:wsDualHttpBinding ClientBaseAddress & firewallswsDualHttpBinding ClientBaseAddress 和防火墙
【发布时间】:2013-01-07 08:44:15
【问题描述】:

我计划将 wsDualHttpBinding 用于带有回调的 WCF 服务。客户端将是通过 Internet 与服务通信的 Windows 窗体应用程序。显然我无法控制客户端的防火墙,所以我想知道在客户端设置 ClientBaseAddress 的正确方法是什么?

现在在我的初始测试中,我在同一台电脑上运行服务和客户端,我正在设置如下绑定

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

但我感觉这在通过 Internet 部署时不起作用,因为“localhost”不会转换为机器地址(更不用担心 NAT 转换),并且该端口可能被客户端防火墙阻止。

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

有人告诉我,如果我不指定 ClientBaseAddress,那么 WCF 基础设施会在端口 80 处创建一个默认客户端基址,用于从服务传入的连接。由于 80 端口通常对防火墙开放,所以应该可以正常工作。

所以只要告诉我 win 表单 wcf 客户端应用程序何时运行然后我如何打开我的自定义端口(如“6667”)并指导我应该使用什么库或什么方法作为结果响应应该来自客户端路由器 到电脑和防火墙不会阻止任何东西。请与现实生活场景讨论这个问题人们如何在现实生活中处理这种情况。谢谢

【问题讨论】:

    标签: wcf


    【解决方案1】:

    正确的方法是使用 TCP 传输而不是 HTTP 传输。 HTTP 上的双工通信需要两个 HTTP 连接——一个从客户端打开到服务器(没关系),第二个从服务器打开到客户端。这仅适用于您可以完全控制两端的情况。仅仅通过猜测要使用的地址就无法避免的复杂性太多了:

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

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

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

    我认为这也回答了您的previous question

    【讨论】:

    • 所以你的意思是,如果我使用托管在 IIS 中的 WSDualHttp 绑定和一个 Windows 窗体客户端开发一项双工通信服务并将该客户端分发给任何客户,那么这是不可能的。客户将连接到我们的服务并回调发生在客户端。我希望我们可以以编程方式打开端口并在服务器端设置端口转发。所以建议我该怎么做。谢谢
    • 您无法从服务器控制客户端配置(端口转发、打开端口等)。
    • 我没有说要从服务器控制,而是我们可以在客户端应用程序中编写代码来打开端口。告诉我是否需要像服务器端一样从客户端启用端口转发?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2014-07-20
    • 2013-07-25
    相关资源
    最近更新 更多