3 个模块之间的进程间通信
本文关键字:进程间通信 之间 模块 | 更新日期: 2023-09-27 18:32:10
我正在寻找有关进行进程间通信的最佳方法的建议。
该解决方案由 3 个项目组成。
-
GUI:这只会向用户显示消息并获得用户输入
-
Windows 服务:与 UI 通信并使用提升的凭据运行第三个模块
-
辅助角色:将执行实际工作的内部 DLL
我需要一种方法来使工作人员直接与 GUI 通信以发送和接收更新。
我想到两种方法(很高兴看到更多建议):
-
使用两个命名管道。一个用于 GUI<>服务通信。另一个用于 GUI<>worker 通信
-
将事件从工作人员引发到服务。并使用从服务到 UI 的 WCF 回调
实施沟通的最佳方式是什么?
注意:此处的问题是 GUI<>工作线程通信。不是 UI<>服务通信。
1)WCF是官方推荐的实现进程间通信的方式(TCP或命名管道是最快的),它取代了远程处理(但始终使用序列化/反序列化)。在高级方案中,可以使用以下方法实现通信
- 内存映射文件;
- 服务总线(服务总线允许创建松散耦合的组件/通信。谷歌为nservicebus,rabbitmq,公共交通等);
- 像Web Sockets或SignalR这样的东西(如果你有浏览器/javascript客户端/GUI,请考虑使用它)。
2) 如果你的工作线程只是库(.net 程序集) - 它将在服务流程中工作。在这种情况下,您不需要发明一些东西来将数据/事件从 Worker 传递到 GUI,所有通信(双工,我想,订阅服务事件)将在 GUI 和服务之间进行(服务仅通过常规 .net 调用将一些工作委托给 Worker )
3)有时我们需要服务,客户端和服务器之间的调度程序之类的东西。您可以在此处找到一些信息。