C# 跨平台通信接口的设计

C# 跨平台通信接口的设计,c#,c++,wcf,rpc,C#,C++,Wcf,Rpc,我有一个在本地系统上运行的C#程序,它需要能够做两件事 在运行Windows、Linux或Android的远程系统上异步剥离远程作业 为这些系统提供一种将这些作业的输出(StdOut/StdErr)发送回本地系统的方法 以前我在与远程windows系统通信时使用过WCF。我在远程windows系统上创建了一个WCF服务器,然后我的本地计算机可以通过该WCF通道发送命令和消息。当我尝试用Linux和Android做同样的事情时,事情变得更加复杂 我想我可以使用REST设置一个本地WCF服务,这样所

我有一个在本地系统上运行的C#程序,它需要能够做两件事

  • 在运行Windows、Linux或Android的远程系统上异步剥离远程作业
  • 为这些系统提供一种将这些作业的输出(StdOut/StdErr)发送回本地系统的方法
  • 以前我在与远程windows系统通信时使用过WCF。我在远程windows系统上创建了一个WCF服务器,然后我的本地计算机可以通过该WCF通道发送命令和消息。当我尝试用Linux和Android做同样的事情时,事情变得更加复杂

    我想我可以使用REST设置一个本地WCF服务,这样所有3个平台都可以通过JSON REST使用任何方便的语言(很可能是c++)向它发送消息。那么,实现需求1的最佳方式是什么呢

    <>我应该麻烦在Linux和Android上运行C++的REST服务器吗? WCF是否可以消费一个没有在.NET中写入的C++ REST服务器? 使用TCP套接字做一些简单的事情会更好吗


    安全性不是问题,因为这是在安全的专用网络上使用的。我只是在寻找运行远程命令/进程并从这些远程系统接收响应消息的最简单方法。

    这实际上取决于您使用的基础结构和服务。如果您身处AmazonWeb服务世界,您可以使用简单队列服务(SQS)来接收消息。然后,远程系统可以轮询队列,并根据从SQS队列中提取的消息运行作业

    我使用ZMQ和JSON正是为了这个目的:创建一个自定义的私有网络拓扑,通过TCP(通过ZMQ)使用JSON消息进行通信。当然,您可以使用任何序列化格式(我在下面列出了一些备选格式)

    我不能给你一个明确的“这是你应该做的”答案,因为这个问题是相当开放的

    • ZMQ:
      • 非常好的跨平台抽象套接字库
      • 可以使用各种传输协议,包括TCP
      • 将消息作为纯字节数组发送,将序列化格式的选择权留给您
    • 一些序列化格式(按我个人喜好的顺序):
      • JSON:
      • MessagePack:
        与JSON完全相同,但更紧凑
        没有架构
        跨平台
      • 谷歌协议缓冲区:
        使用架构
        具有C++、C语言、java、Python(至少)
      • 的绑定