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

本文关键字:进程间通信 之间 模块 | 更新日期: 2023-09-27 18:32:10

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

该解决方案由 3 个项目组成。

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

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

  3. 辅助角色:将执行实际工作的内部 DLL

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

我想到两种方法(很高兴看到更多建议):

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

  2. 将事件从工作人员引发到服务。并使用从服务到 UI 的 WCF 回调

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

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

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

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

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

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

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