C#寻找双向沟通。 (WCF)

时间:2013-04-28 15:19:25

标签: c# wcf client-server protocols

我的节目:

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

  2. 然后服务器每秒(或更少)开始推送小数据(低于1KB)给所有人。

  3. 我的问题:

    1. 我应该使用什么服务? WCF是正确的吗?
    2. 如果是WCF,那么使用哪个协议? http,tcp ...?
    3. 起初我认为WCF是正确的选择。我实现了一个基本的简单。然后突然我注意到这只是一个客户端到服务器的连接。和Server无法以相同的方式与客户端通信。除非我在客户端上启动服务,否则它将成为服务器。

      所以最后,我问我应该如何阻止服务器和客户端之间的双向通信,考虑到我提到的速度因素和使用的正确协议。

      更新

      好的,让我添加一些细节。这实际上是教师客户端< >服务器< >学生客户沟通计划。老师在WPF的inkCanvas上绘制一些东西。这张图应该推送给所有学生的客户。这就是服务器应该推送这些数据的原因。沟通必须是双向的。

4 个答案:

答案 0 :(得分:1)

一种可能性是使用network library。查看有关使用NetworkComms.Net创建WPF聊天应用程序的this文章。客户 - >服务器,服务器 - >客户关系是对称的而不是WCF,所以推送通知是完全直截了当的。您还可以选择通信协议,例如: TCP或UDP,可以轻松添加自己的扩展来处理传出/传入数据。

免责声明 - 我是这个图书馆的开发人员。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

最好不要将Server PUSH数据发送给客户端,而是让客户端从服务器获取PULL数据。虽然这可以通过双工来实现,但由于大多数ISP或服务器环境都不会高度推荐,出于安全原因,不会允许来自防火墙内的出站消息。

这是我的建议:

让客户端应用程序从服务器中拔出,而不是让服务器推送到它的客户端。这样,服务器不必具有恒定连接,因为它不能扩展,更重要的是通信连接是来自一个应用程序(即服务器)的非常昂贵的资源。

重新设计你的方法。

答案 3 :(得分:0)

我使用net.tcp编写了一个托管在Windows服务上的WCF服务器,它肯定可以将数据推送到多个客户端。该框架为您提供了大量的倾听,接受和多种联系,因此产生了很多好处。

您的方案中棘手的部分是与教学客户端共享来自学生客户端的数据。 AFAIK,没有内置的方法将数据从一个客户端 - 服务器连接传输到另一个。

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

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