3个模块之间的进程间通信

时间:2016-01-28 06:30:56

标签: c# wcf named-pipes

我正在寻找有关进行进程间通信的最佳方法的建议。

该解决方案包含3个项目。

  1. GUI:这只会向用户显示消息并获取用户输入

  2. Windows服务:与UI通信并使用提升的凭据运行第3个模块

  3. 工作人员:将执行实际工作的内部DLL

  4. 我需要一种方法让工作人员直接与GUI通信以发送和接收更新。

    我有两种方法可以做到这一点(很乐意看到更多建议):

    1. 使用两个命名管道。一个用于GUI<>服务通信。另一个用于GUI<>工人沟通

    2. 将一个事件从Worker提升到Service。并使用从服务到UI的WCF回调

    3. 实施沟通的最佳方式是什么?

      注意:此处的问题是GUI<>工作者通信。不是UI<>服务通信。

1 个答案:

答案 0 :(得分:0)

1)WCF是官方推荐的实现进程间通信的方式(tcp或命名管道最快),它取代了远程处理(但总是使用序列化/反序列化)。 在高级场景中,可以使用

实现通信
  • 内存映射文件;
  • 服务总线。 (服务总线允许创建松散耦合的组件/通信。谷歌用于nservicebus,rabbitmq,masstransit等);
  • Web Sockets或SignalR之类的东西(如果你有浏览器/ javascript客户端/ GUI,请考虑使用它。)

2)如果您的工作人员只是库(.net程序集) - 它将在服务进程中工作。在这种情况下,您不需要发明一些东西来将数据/事件从Worker传递到GUI,所有通信(双工,我想,订阅服务事件)将在GUI和服务之间执行(服务只通过常规将一些工作委托给Worker .net来电)

3)有时我们需要服务,客户端和服务器之间的调度程序。您可以找到一些信息here