如何在 Windows 服务之间进行通信

Posted

技术标签:

【中文标题】如何在 Windows 服务之间进行通信【英文标题】:How to communicate between Windows Services 【发布时间】:2012-02-16 21:51:04 【问题描述】:

我有 2 个使用 C# 创建的 Windows 服务。

我希望其中一个服务调用第二个 Windows 服务中的函数。

我该怎么做?

编辑:

问题是我必须运行的应用程序(我不需要它们而是服务进程也很好)但是我需要这 2 个应用程序进行通信,这 2 个应用程序正在运行同一台服务器,

【问题讨论】:

请参阅related post 了解跨应用通信。 哪种数据?多少条消息?平均邮件大小是多少? 【参考方案1】:

当然。您可以使用很多 IPC 机制。远程处理、TCP/HTTP 侦听器等。

这两种服务是否提供了可能在其他服务之外有用的功能?

有关更多想法,请参阅此主题: IPC Mechanisms in C# - Usage and Best Practices

编辑: 正如 Davide Piras 指出的,如果 WCF 可供您使用,那么请考虑使用它。它将简化生活。 WCF 配置文件有时很难使用,但也有一个很好的工具: http://msdn.microsoft.com/en-us/library/ms732009.aspx

【讨论】:

应尽可能避免远程处理和 HTTP 以支持 WCF【参考方案2】:

服务是否在同一个盒子上?你有 .NET 4 吗?强烈建议使用最快的模式,memory-mapped files。

如果它们在同一个盒子上,但您没有 .NET 4,或者在同构的 Microsoft Windows 网络中,named pipes 可以工作。更重要的是,我会使用WCF over a named pipe。

【讨论】:

【参考方案3】:

我发现所有其他答案都是正确的,但有点过于复杂(WCF 很重要)并且不可扩展(内存和命名管道只能在同一台服务器上工作)。我建议你DotNetMQ消息系统。它易于使用和部署,甚至可以让您在不同服务器上运行的进程之间进行通信。

【讨论】:

以上是关于如何在 Windows 服务之间进行通信的主要内容,如果未能解决你的问题,请参考以下文章

您如何在 Windows Vista 会话 0 和桌面之间进行通信?

如何在数据库绑定的应用程序之间进行有效的通信?

如何在 Windows 窗体应用程序和网站之间进行通信?

Spring Boot - 如何在微服务之间进行通信?

我如何在微服务之间进行通信?

SAML 中的服务提供者和实际应用程序之间如何/应该如何进行通信?