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

时间:2015-01-05 12:28:49

标签: c# asp.net wcf sockets networking

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

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

问题

1)我无法控制客户端PC上的防火墙,代理,NAT。大多数公司的员工PC都有很多网络安全,例如防火墙阻塞ICMP流量和一些端口,一些路由器可能是禁用端口转发等,客户端可以改变网络位置。 我不想在客户端路由器,代理,防火墙上进行任何设置。 在沟通期间我如何处理客户端的那种问题? 如你所知,skype在这种情况下工作得很好。

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

2)在客户端,没有IIS。

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

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

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

如果两者都使用网络应用程序,那么进行双工通信就没有问题。因为我知道WEBRTC适合那里大声笑。

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

WSDualHttpBinding: 如果NAT后面的客户端不起作用。检查此详细信息click here

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

Xsocket: 如果ICMP流量阻止客户端上的防火墙,它也无法正常工作。点击这里click

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

Socket.io: 需要设置node.js等许多其他东西,很难实现,因为我需要在存在应用程序上实现,我不是在做新的应用

C#套接字程序: 如果NAT.check后面的客户端click for detail

,它将无效

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

你应该用它调查问题,signalR最终会起作用。

答案 1 :(得分:1)

我正在广泛使用SignalR在服务器(C#)之间,服务器和移动应用程序(C#,Xamarin,iOS,Android)之间进行通信。服务器位于不同的位置,移动应用程序可以在任何地方。这一切都非常可靠。

查看:http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-hosthttp://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client

答案 2 :(得分:0)

我一直在闲暇时使用套接字(诚然用c ++,而不是c#,但应该没有区别),而且我从未遇到过连接到防火墙/路由器后面的客户端的问题,即使没有转发端口。

路由器和防火墙通常不喜欢类似服务器的程序,例如。将套接字绑定到端口号的程序。您的客户是否做了与绑定相关的事情?因为它不应该。

毋庸置疑,我会建议一个套接字程序。我看待它的方式,这是最灵活的方式。