Windows 服务和 Web 服务之间的进程间通信

Posted

技术标签:

【中文标题】Windows 服务和 Web 服务之间的进程间通信【英文标题】:Inter-process comunication between Windows service and web service 【发布时间】:2012-02-21 17:57:22 【问题描述】:

任何帮助/反馈将不胜感激。我想用 C# 开发一个 Windows 服务,这样它就可以通过命名管道与用 C# 编写的 Web 服务进行通信。这种跨进程的方法可能吗?使用命名管道的原因是性能。

【问题讨论】:

当您说“用 C# 编写的 Web 服务”时,它是否托管在 IIS 中,如果不是,如何?如果我对您的理解正确,那么它是“Web 服务”这一事实并不相关 - 重要的是什么样的进程,在什么安全上下文中运行,托管您的 Windows 服务需要通过命名管道与之通信的代码。 @ChrisDickson 是的,Web 服务托管在 IIS 中。实际上,windows服务和web服务托管在同一台服务器(windows server)上。此外,没有任何服务具有安全上下文。所以我的问题是在这种情况下可以实现命名管道吗? 【参考方案1】:

我会亲自创建一个 WCF 服务并使用 netNamedPipe 绑定。

我提供的链接包含一个工作示例。

您需要注意的是,由于 Windows 2008 Server 强化(包括 Windows 7),服务在不同的会话 ID(会话 0)中运行,并且无法访问在用户模式下运行的 WCF 服务.

【讨论】:

感谢您的建议,但是 Windows 服务还必须通过 TCP 连接到非 Windows 环境,所以如果我使用 WCF,我将无法使用 TCP 协议 当然可以使用TCP。您可以将它托管在 TCP 的不同端口上。 如果我从 msdn 规范中正确理解,如果我使用 WCF,我只能使用 netNamedPipes 和 netTcp 作为通信协议。它是否正确?如果是这样,我想使用常规的 TCP 协议而不是 netTcp,因为这个协议只在 windows 机器之间使用。 @user945511 那么 WCF 不适合你。 netTcp 是 TCP 的专有格式,也是 netNamedPipes。但是如果客户端和服务端都是WCF,那就很好用了。

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

boost::Windows 服务和用户应用程序之间的进程间

在 Windows 服务和窗体应用程序之间使用套接字进行进程间通信

Windows 服务和 Windows 进程有啥区别?

在 Windows CE 6.0 中的进程之间共享 GDI 句柄

服务和用户模式进程之间的共享全局事件不起作用

C#多进程-多线程服务和windows调度器