给定:
- 应用程序 - 桌面 GUI (WPF) .NET 应用程序
- 监视应用程序的 Windows 服务(也是 .NET)
Windows 服务会定期“ping”应用程序以确保它是健康的(如果不是,winservice 将重新启动它)。
我打算通过命名管道实现“pinging”。为了让事情更简单,我决定用 WCF 来做。该应用程序托管 WCF 服务(一个操作 Ping 返回某些内容)。Windows 服务是此 WCF 服务的客户端,基于计时器定期调用它。
这就是 Windows 7 中的全部
内容。Windows 服务在 LocalService 下运行(在 session#0 中)。
桌面应用程序正在当前登录的用户下运行(在会话#1 中)。
问题:
Windows 服务看不到在桌面应用程序中创建和监听的 WCF 端点(使用 NetNamedPipeBinding)。这意味着通过 wcf 代理进行调用时,我会收到此异常:“在您的本地计算机上找不到管道端点 'net.pipe://localhost/HeartBeat'”
我确定代码没问题,因为另一个桌面应用程序(在 session#1 中)可以看到端点。
显然,在这里我正在处理一些用于 Win32 系统对象隔离的安全问题。但我相信应该有办法解决我遇到的限制。
我可以牺牲 WCF 方法并采用原始的 NamedPipe 方式。