【问题标题】:Interprocess communication between 3 modules3个模块之间的进程间通信
【发布时间】:2016-05-05 09:42:28
【问题描述】:

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

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

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

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

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

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

我有两种方法可以做到(很高兴看到更多建议):

  1. 使用两个命名管道。一种用于 GUI服务通信。另一个用于 GUIWorker 通信

  2. 从 Worker 向 Service 引发事件。并使用 WCF 回调从服务到 UI

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

注意:这里的问题是 GUIWorker 通信。不是 UIService 通信。

【问题讨论】:

  • 搜索windows ui service interprocess communication 并从那里决定。你的问题很广泛。请参阅stackoverflow.com/help 了解如何提出好的问题。
  • 问题不在于windows服务和UI之间的通信。问题是如何在独立于windows服务的“worker”和UI之间进行通信。

标签: c# wcf named-pipes


【解决方案1】:

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

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

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

3) 有时我们需要诸如服务、客户端和服务器之间的调度程序之类的东西。你可以找到一些信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2013-06-07
    • 1970-01-01
    • 2013-10-04
    相关资源
    最近更新 更多