4

我正在编写一个具有桌面和移动应用程序组件的应用程序。桌面应用程序是用 c# 编写的,我希望能够打开它以充当移动应用程序的服务器(类似于 AirVideo 所做的)。我怎样才能在不要求用户配置他们的防火墙和/或路由器的情况下做到这一点?

理想情况下,我想在桌面应用程序中自行托管一个宁静的 wcf 服务。我已经尝试过了,但是防火墙的自动配置不允许远程连接到 wcf 服务,因为它似乎是由系统进程托管的。这种行为有解决方法吗?

编辑:我已经通过使用 NATUPnP COM 库(http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-)尽我所能解决了路由器问题通过-UPnP.aspx)。我仍然需要知道如何允许通过防火墙远程连接到自托管 WCF 服务,而无需手动配置防火墙(一旦启动应用程序,我可以接受用户提示允许连接)。

4

1 回答 1

2

在您的路由器中设置一个指定路由到您的服务器地址的特定端口,
因此如果您的路由器真实 ip 是 abcd,您应该设置所有与 abcd:port# 的通信都被路由到您的服务器本地地址。(abcd:port# --> serverIP)

可以从您的路由器配置中实现此设置。

在您无法修改路由器设置/防火墙设置的情况下:
这意味着您不能使用端口来侦听传入连接,而只能使用传出连接。为了克服这个问题,您将不得不使用具有真实 IP 地址的第三台服务器,该服务器将充当双方的侦听器。典型场景可描述如下:

客户端 - A(桌面)
客户端 - B(智能手机)
服务器端 - S(通信服务器)

  1. S --> 打开端口以侦听传入连接。
  2. A --> 每 x 秒连接到 S 以检查是否有请求做某事正在等待。
  3. B --> 连接到 S.(向 A 发出等待请求)

这样,S 就可以充当代理来粘合双方的通信。

于 2012-05-28T04:18:55.710 回答