【问题标题】:WCF Service behind firewall – How to set up port forwarding?防火墙后的 WCF 服务 – 如何设置端口转发?
【发布时间】:2011-05-30 09:08:23
【问题描述】:

我刚开始接触 WCF 编程。我在防火墙后面的工作计算机上设置了一个自托管的测试 Web 服务;它位于http://localhost:8000/MyTestService。我可以通过浏览器访问服务页面;一切正常。

现在我想从位于不同网络上的家用计算机访问该服务。我有一个动态 dns(称为 mydomain.dyndns.org)设置为指向我的工作路由器。经测试,dyndns 指向正确的地址。

现在我已经在我的家用电脑上安装了一个测试应用程序来连接我的网络服务。因此,我将 NAT 配置为将端口 8000 上的请求转发到相同端口号上的工作计算机。

我现在在家用电脑上打开浏览器并导航到http://mydomain.dyndns.org:8000/MyTestService。什么都不做。

显然我错过了一些关于 NAT 和端口转发的真正基础知识......但正如我所说,我在这方面的编程方面有点新,我非常感谢这里的一些指导!

【问题讨论】:

    标签: c# wcf firewall nat self-hosting


    【解决方案1】:

    我遇到了同样的问题。

    在这个话题的帮助下。 http://www.codeproject.com/Questions/140317/WCF-services-and-Windows-Firewall。即使防火墙处于活动状态,我的 WCF 服务也能在本地 LAN 上运行良好。

    但无法通过互联网访问。 端口转发后,我可以看到服务描述。但我无法使用它。

    这篇文章http://gavinmckay.wordpress.com/2009/03/24/howto-fix-wcf-host-name-on-iis/ 为我指明了正确的方向。 该服务是可见的,但与您的 Web 服务器的连接将失败,因为 WSDL 指向未发布的服务器名称,而您的客户端将无法到达那里。

    在我的情况下,我需要将本地端点的自托管 wcf 更改为公共端点。

            // 1 Create a URI to serve as the base address.
            Uri baseAddress = new Uri("http://publicdomain.com:8000/GettingStarted/");
            // Step 2 Create a ServiceHost instance
            ServiceHost selfHostRemote = new ServiceHost(typeof(MyService), baseAddress);
    

    【讨论】:

    • 这也是我的问题,uri 需要是它运行的物理位置。谢谢马塞尔..
    【解决方案2】:

    您是否看到错误或空白页面?你能从防火墙后面的计算机上检查 canyouseeme.org 端口是否真的打开了吗?您能否使用 sysinternals tcpview 等工具检查连接尝试到达这台计算机而不仅仅是路由器?

    【讨论】:

    • 您需要三样东西:端口转发、路由器上的开放端口和计算机上的开放端口。除了添加端口转发之外,您可能还需要打开路由器防火墙上的端口。您的计算机的防火墙也可能不接受来自外部的传入连接,仅在本地主机上。
    • 啊哈,这里有个线索:canyouseeme.org 看不到那个端口!我尝试了8000端口和18000端口,转发到我电脑上的8000端口;都失败了。不过,RDP 端口 (3389) 确实可以工作。当我设置另一个端口(13389)转发到我的端口 3389 时,这也有效。所以很明显我电脑上的 8000 端口没有正确响应。现在呢?
    • 在我的电脑上打开防火墙到端口 8000 - 现在可以工作了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2011-02-01
    • 2012-02-23
    • 2013-10-06
    • 2015-06-17
    • 2011-12-22
    • 2014-11-28
    相关资源
    最近更新 更多