2013-04-28 29 views
2

我的程序:C#寻找双向沟通。 (WCF)

  1. 不同的客户端连接到服务器(用户登录)

  2. 然后服务器开始小数据(以下1KB)向他们每一秒(或更少)。

我的问题:

  1. 我应该使用什么样的服务? WCF是正确的吗?
  2. 如果WCF,那么使用哪个协议? http,tcp ...?

起初我以为WCF是去与正确的事情。我实现了一个基本的简单。然后突然我发现这只是一个客户端到服务器的连接。而服务器无法以相同的方式与客户端进行通信。除非我在客户端启动服务,并使其成为服务器。

所以最后,我问我应该怎么这个教学贯彻2路服务器和客户机之间的通信,考虑到速度的因素,我提到和使用权协议。

UPDATE

好让我补充了一些细节。这实际上是一个老师客户端<>服务器<>学生客户端通讯程序。教师在WPF的inkCanvas上绘制一些东西。这张图应该推给所有学生的客户。这就是为什么这个数据应该被服务器推送的原因。并且沟通必须是2路。

+0

你想要的客户是什么? Silverlight的? WPF? ASP.NET/AJAX? WinRT的? – 2013-04-28 15:24:34

+0

@ChrisSinclair它是WPF。实际上服务器应该实时发送InkCanvas更改到客户端。 – xperator 2013-04-28 15:31:48

+2

看看http://msdn.microsoft.com/en-us/library/ms731064.aspx – khlr 2013-04-28 15:35:32

回答

1

一种可能性是看使用network library。看看使用NetworkComms.Net创建WPF聊天应用程序的this文章。客户端 - >服务器,服务器 - >客户端关系是对称的,而不是WCF,因此推送通知是非常简单的。您还有许多通信协议,例如TCP或UDP,并且可以轻松添加自己的扩展来处理传出/传入数据。

免责声明 - 我对这个库的开发人员。

+0

哇谢谢!库代码示例看起来非常简单。几分钟后就会开始工作。但是,您能否告诉我为什么您建议通过WCF使用此代码 – xperator 2013-04-28 16:40:23

+0

这绝对是一个偏好和编码背景的问题,您可以同时使用这两种方法。恕我直言(我接受我可能有点偏见)NetworkComms.Net比WCF更强大,当然更容易实施。 – MarcF 2013-04-28 16:45:23

0

,你已经开不最好有服务器推送数据给它的客户,而是有客户端从服务器获取数据。虽然这对于双面打印来说是可能的,但是由于安全原因,它不像多数ISP或服务器环境那样被高度推荐,并且不允许来自其防火墙内的出站消息。

这里是我的建议:

有客户端应用程序(一个或多个)从服务器偶尔拉,而不是让服务器推到它的客户。通过这种方式,服务器不必具有恒定的连接,因为它不会扩展,并且更重要的通信连接是来自一个应用程序(即服务器)的非常昂贵的资源。

重新设计您的方法。

+0

好吧,我添加了更新到我的文章。这就是为什么我需要服务器来推送数据的原因。 – xperator 2013-04-28 16:36:55

+0

我认为@xperator是对的。在你的情况下,学生客户端应该以循环方式从服务器刷新数据,以检查教师客户端的数据。那么你必须提供这两种客户端。 – Bronek 2013-04-28 17:03:08

+0

感谢您的更新。从可扩展性的角度来看,我的方法仍然是一个更好的解决方案。这就是例如消息总线如何通过pub/sub模型工作。看起来子接收通知,但实际上客户拉取数据。为了帮助您可视化这一点,请将服务器视为队列。教师在队列上发送消息(推送)。客户端有一个后台线程来定期检查队列(拉)。看看RabbitMQ。这将适合您使用称为主题的概念的需求。 – code5 2013-04-29 02:53:39

1

我实现了完全一样的两个功能WPF应用程序之间的通信。回答你的问题,是的,在我看来,WCF是最好的选择。我想你已经实现了使用WCF的单向通信。为了能够让服务器与客户进行对话,您需要实现回调,here是一篇很好的文章。

0

我已经使用net.tcp编写了一个托管在Windows Service上的WCF服务器,它绝对可以将数据推送到多个客户端。该框架为您提供了倾听,接受和多重联系,所以肯定有很多好处。

您场景中棘手的部分将与教学客户端共享数据。 AFAIK,没有内置的方式将数据从一个客户端服务器连接传输到另一个。

一个天真但简单的方法是将教师数据存储到一个临时位置(如文件或数据库,并具有某种互斥锁),并且当需要将数据传输给学生时,只需从临时位置。

或者您可以将您的架构更改为Peer-To-Peer