服务器和客户端之间的双向通信

Ada*_*dam 2 c# sockets asp.net wcf networking

情况:我们有一个在服务器上运行的 Web 应用程序。此应用程序需要从位于不同网络上的其他 PC(客户端)获取数据。

在客户的 PC 上,WCF托管在Windows Services使用其本地Sql db. 我想在服务器和客户端之间进行双工通信,以便彼此共享数据。数据共享是指在客户端和服务器之间共享数据表、数据集、字符串等。

问题

1)我无法控制客户端 PC 上的防火墙、代理、NAT。大多数公司员工电脑有很多网络安全,例如防火墙阻止 ICMP 流量和一些端口,一些路由器可能被禁用端口转发等,客户端可以更改网络位置。我不想在客户端路由器、代理、防火墙上进行任何设置。在沟通过程中,我如何处理客户端的那种问题?如您所知,Skype 在这种情况下运行良好。

防火墙经常阻止与客户端的入站连接;客户端可能无法从服务器访问,它可能在路由器后面使用 NAT 转换,因此无法在路由器上设置端口转发和某些新路由器禁用端口转发的情况下联系。

2) 在客户端没有 IIS 。

我不想在客户端 PC 上允许远程访问。

有100多个客户端,只有一个服务器。一台服务器需要与不同网络上的许多客户端通信。

3)我的客户端应用程序的一侧使用窗口应用程序和 wcf 托管在窗口服务中,我的服务器的另一侧使用 Web 应用程序。所以它的平均通信是在台式电脑和网络电脑之间,这就是问题。

如果两者都使用 Web 应用程序,那么进行双工通信就不是问题。因为我知道 WEBRTC 适合那里,哈哈。

我已经测试并发现问题的技术

WSDualHttpBinding:如果客户端在 NAT 后面,则不起作用。检查此详细信息单击此处

MSMQ: 如果客户端超过 1 并且性能问题也是因为它使用 RAM 内存,那么它的糟糕技术。检查这里点击这里

Xsocket:如果客户端上的防火墙阻止 ICMP 流量,它也不起作用。检查这里点击

WebRTC:它工作正常,但它支持网络到网络通信。作为我的客户端,我有 win 应用程序。

Socket.io:它需要设置 node.js 和许多其他东西,很难实现,因为我需要在现有应用程序上实现,我没有制作新的应用程序。

C# Socket 程序:如果客户端在 NAT 后面,它就不会工作。点击这里查看详细信息

服务总线中继:即使测试也不是免费的。

socketPro:我研究过我发现它很好,但我在谷歌上找不到任何合适的样本。所以我可以测试它。

正版频道:我在 google 上找不到任何样本。

让我们看看 SignalR 问题。: 服务器端我运行一个控制台应用程序,客户端我运行两个应用程序,一个是控制台和其他 web。当我运行控制台客户端应用程序时,它没有启动与服务器的连接,但是当我使用 Web 客户端应用程序时,它工作正常。示例链接在这里SignalR 双向通信 我不明白为什么会这样??

请告诉我处理这种情况的最安全、最快速的方法是什么?我应该使用什么方法?

Mik*_*e W 5

SignalR似乎适合这种解决方案,因为它很灵活。它协商最快的可用通信渠道,这就是您正在寻找的。

您应该调查它的问题,并且 signalR 最终会起作用。