Linux Web服务器和.NET客户端应用程序之间的实时通信

时间:2016-01-28 07:55:14

标签: c# asp.net wpf wcf signalr

我正在尝试做什么

开发一个C#WPF Windows应用程序,它可以使用运行带有MySQL的CentOS 6 Linux的中央Web服务器向其他WPF应用程序发送和接收数据。

  • WPF客户端必须能够向服务器发送消息,并且必须能够实时收听服务器以获取消息,并在消息发布后立即显示。

  • 服务器端程序应该能够将其中一些消息解析为.NET数据对象,并且应该能够向所有客户端或仅特定客户端广播消息。

  • 如果客户端收到某条消息,它会在本地应用程序上执行一个方法。
  • 每台客户端计算机将在Windows 7,8或10上运行.NET 4.5或更高版本,并将使用Windows防火墙,但有些可能还有其他第三方防火墙软件。

此外,如果服务器程序可以处理来自移动应用程序(Android应用程序到服务器 - 服务器到WPF客户端,反之亦然)以及WPF客户端的请求,那将是非常可取的,但不是必需的。

示例

服务器(德克萨斯州的服务器)

管理客户端(加利福尼亚州的用户)

客户端2 (佛罗里达州的用户)

客户3 (纽约用户)

  1. 我发了一个"你好"从我的计算机管理客户端广播到服务器。

  2. 服务器收到消息并广播"你好"所有倾听的客户。

  3. 客户2和客户3显示"你好"在他们的客户身上回应"嘿!"

  4. 服务器收到"嘿!"消息并发送给管理客户端。

  5. 我发了一条消息"打开芝麻"仅在客户端2的应用程序上执行RunOnMagicWord()方法,对客户端3不执行任何操作。

  6. Client2运行RunOnMagicWord()并发送"完成!"方法执行后发送给服务器的消息。

  7. 服务器收到"完成!"消息并发送给管理客户端。

  8. 我所看到的

    • REST / JSON
    • WCF服务
    • ASP.NET MVC
    • PHP脚本
    • SignalR
    • 套接字
    • HttpClient的

    我更喜欢将所有内容保存在C#.NET中,包括服务器端程序,以便可以轻松地序列化客户端和服务器之间发送的数据。 SignalR似乎最接近我正在寻找的东西,但在我看来它只适用于IIS,而不适用于Apache / Linux。我没有选择切换到IIS,也觉得我可能会让整个事情过于复杂,所以......

    我的问题

    我是否正沿着正确的道路前往使用SignalR之类的东西?如果是这样,我如何让它在我的CentOS服务器上运行?或者,Linux / MySQL服务器是否有一种更简单的方式为.NET应用程序提供这种功能?

    编辑:添加了我尝试过的其他内容,重新格式化了段落,添加了对此项目的其他限制以回应评论

1 个答案:

答案 0 :(得分:4)

你提到的一切都可以奏效。但是,您应该使用的决定可以由业务需求和约束来决定:

  • 信号器和websockets不是可靠的传送机制。消息可能会丢失。用于客户端通知,如果邮件未送达则风险较低
  • Web服务(rest或soap)是同步的,也是点对点的。如果一方没有回应怎么办? WebApi with Rest最容易实现,并且可以跨平台工作。它很容易让PHP与.NET交谈,只需记录和共享你的消息架构
  • 像RabbitMq,MSMQ,Azure服务总线/队列这样的消息代理是异步且可靠的,但实现起来有点复杂。您获得适当的弹性和交付确认。

对于这种聊天功能,Linux上的SignalR和mono .net app应该可以正常工作。此外,Signalr不是这里唯一的选择,你有.net的许多websockets实现,如https://github.com/StackExchange/NetGain