我正在编写一个包含桌面和移动应用程序组件的应用程序.桌面应用程序是用c#编写的,我希望能够将其打开以充当移动应用程序的服务器(类似于AirVideo所做的).如何在不要求用户配置防火墙和/或路由器的情况下完成此操作?
理想情况下,我想在桌面应用程序中自行托管一个安静的wcf服务.我已经尝试过了,但防火墙的自动配置不允许远程连接到wcf服务,因为它似乎由系统进程托管.这种行为有解决方法吗?
编辑:我已经通过使用NATUPnP COM库尽可能地解决了路由器问题(http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-通UPnP.aspx).我仍然需要知道如何允许通过防火墙远程连接到自托管WCF服务而无需任何手动配置防火墙(我可以通过用户提示在应用程序启动后允许连接).
最佳答案 在路由器中设置指定路由到服务器地址的特定端口,
因此,如果您的路由器真正的IP是a.b.c.d,您应该设置与a.b.c.d:port#的所有通信都被路由到您的服务器本地地址. (a.b.c.d:port# – > serverIP)
可以通过路由器配置实现此设置.
在您无法修改路由器设置/防火墙设置的情况下:
这意味着您无法使用端口侦听传入连接,并且只能使用传出连接.要克服这一点,你必须使用具有真实IP地址的第3台服务器,它将充当双方的监听器.典型场景可描述如下:
客户端 – A(桌面)
客户端 – B(智能手机)
服务器端 – S(通信服务器)
> S – >打开端口以侦听传入连接.
> A – >每隔x秒连接到S以检查是否有等待的请求.
> B – >连接到S.(发出等待A的请求)
通过这种方式,S可以作为粘合双方通信的代理.