【问题标题】:Best approach in communicating with processeses与流程沟通的最佳方法
【发布时间】:2011-06-04 20:02:18
【问题描述】:

我将创建一个充当某种任务管理器的应用程序。出于稳定性原因,我不会使用线程,而是使用进程。我必须处理几个第三方库和/的 COM 服务器,它们并不总是那么稳定,有时会产生严重的崩溃。这可能(当然)不会影响任务管理器

使用进程的问题是如何与它们通信?该过程必须 f.e.每 x 秒返回一个状态。

我曾考虑在每个进程的单独端口上使用 TCP,但这是最好的方法吗?

【问题讨论】:

    标签: c# .net vb.net tcp tcplistener


    【解决方案1】:

    我也会使用 WCF 和命名管道,但如果你愿意的话,你可以使用信号和共享内存(内存映射文件)。它的速度更快,但可能不值得代码复杂性。

    查看blog post 以获取一些示例代码。

    【讨论】:

    • 所需的通信非常有限,因此这可能不是此任务最理想的解决方案。
    【解决方案2】:

    我认为你应该看看 Instrumentation:

    http://msdn.microsoft.com/en-us/magazine/cc300488.aspx

    任何其他方法,例如在端口上交谈或 WCF 都会增加层,这会使推断问题的根本原因变得更加困难;与 Instrumentation 相比,它在性能方面也更胜一筹。 WMI 是围绕高性能监控构建的。此外,从操作上讲,这是最好的方法,因为它可以用于监控流程运行状况的管理工具。

    【讨论】:

      【解决方案3】:

      您可以使用 WCF(与 NetNamedPipeBinding 绑定)。

      也许可以考虑在 AppDomains 中运行您的进程。

      【讨论】:

      • 我同意,但在我的解决方案中我无法使用服务。它需要是进程。
      • @marc, appdomains != 服务
      • 好的,那我再详细看看。起初管道看起来是最简单的方法,但同样:还不确定。
      【解决方案4】:

      使用管道将是一个不错的选择。查看System.IO.Pipes 命名空间。

      【讨论】:

      • 起初这看起来像我需要的。简单,无需任何额外设置。
      【解决方案5】:

      命名管道可能会更有效。看看 WCF:

      Expose a WCF Service through a Named Pipes binding

      【讨论】:

      • 我同意,但在我的解决方案中我无法使用服务。它需要是进程。
      • 每个进程都可以暴露一个服务,我没看出问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多