如何在 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 服务之间进行通信的主要内容,如果未能解决你的问题,请参考以下文章