【发布时间】:2015-01-05 12:28:48
【问题描述】:
情况:我们在服务器上运行了一个 Web 应用程序。此应用程序需要从位于不同网络上的其他一些 PC(客户端)获取数据。
在客户的电脑上,WCF 使用其本地 Sql db 托管在 Windows Services 中。我想在服务器和客户端之间进行双工通信以相互共享数据。
数据共享是指在客户端和服务器之间共享数据表、数据集、字符串等。
问题:
1) 我无法控制客户端 PC 上的防火墙、代理、NAT。大多数公司员工 PC 具有很多网络安全性,例如防火墙阻止 ICMP 流量和一些端口,一些路由器可能禁用端口转发等,客户端可以更改网络位置。 我不想在客户端路由器、代理、防火墙上进行任何设置。 在沟通过程中,我该如何处理客户端的这种问题? 如您所知,Skype 在这种情况下运行良好。
防火墙经常阻止与客户端的入站连接;客户端可能无法从服务器访问,它可能在路由器后面使用 NAT 转换,因此如果没有在路由器上设置端口转发并且某些新路由器禁用端口转发,就无法联系到它。
2) 在客户端没有 IIS。
我不想在客户端 PC 上允许远程访问。
有超过 100 个客户端,只有一个服务器。一台服务器需要与不同网络上的多个客户端进行通信。
3) 一方面我的客户端应用程序正在使用窗口应用程序和托管在窗口服务中的 wcf,而在我的服务器上的另一端我正在使用 Web 应用程序。所以它的平均通信是在台式电脑和网络电脑之间,这是问题。
如果两者都使用 Web 应用程序,那么进行双向通信就没有问题。因为我知道 WEBRTC 适合那里哈哈。
我已经测试并发现问题的技术
WSDualHttpBinding: 如果客户端在 NAT 后面,则不起作用。详情请查看click here
MSMQ :如果客户端超过 1 个,它的技术不好,性能问题也因为它使用 RAM 内存。在这里查看click here
Xsocket: 如果 ICMP 流量被客户端上的防火墙阻止,它也不起作用。在这里查看click
WebRTC:它工作正常,但它支持网络到网络通信。作为我的客户端,我有 win 应用程序。
Socket.io: 它需要设置 node.js 和许多其他的东西,很难实现,因为我需要在现有应用程序上实现,我没有做新的应用。
C# Socket 程序: 如果客户端在 NAT 后面,它就无法工作。请在此处查看 click for detail
Service Bus 中继:即使是测试也不是免费的。
socketPro:我研究了一下,发现它很好,但我在谷歌上找不到任何合适的样本。所以我可以测试它。
正版频道:我在 google 上找不到任何示例。
让我们看看 SignalR 问题。: 服务器端我运行一个控制台应用程序,客户端我运行两个应用程序,一个是控制台,另一个是 Web。当我运行控制台客户端应用程序时,它没有启动与服务器的连接,但是当我使用 Web 客户端应用程序时,它工作正常。 示例链接在这里SignalR two way communication 我不明白为什么会这样??
请告诉我处理这种情况最安全、最快捷的方法是什么?我应该使用什么方法?
【问题讨论】:
标签: c# asp.net wcf sockets networking