【发布时间】:2011-05-17 05:34:53
【问题描述】:
鉴于:
- 应用程序 - 桌面 GUI (WPF) .NET 应用程序
- Windows 服务监视应用程序(.NET 也是)
windows 服务会定期“ping”应用程序以确保它是健康的(如果不是,winservice 将重新启动它)。
我打算通过命名管道实现“pinging”。为了让事情更简单,我决定用 WCF 来做。该应用程序托管 WCF 服务(一个操作 Ping 返回某些内容)。 Windows 服务是此 WCF 服务的客户端,根据计时器定期调用它。
这就是 Windows 7 中的全部内容。
Windows 服务正在 LocalService 下运行(在会话 #0 中)。
桌面应用程序正在当前登录的用户下运行(在会话#1 中)。
问题:
Windows 服务看不到在桌面应用程序中创建和监听的 WCF 端点(使用 NetNamedPipeBinding)。这意味着通过 wcf 代理调用时,我会收到此异常:“在您的本地计算机上找不到管道端点 'net.pipe://localhost/HeartBeat'”
我确定代码没问题,因为另一个桌面应用程序(在会话#1 中)可以看到端点。
很明显,我正在处理一些用于 Win32 系统对象隔离的安全问题。
但我相信应该有办法解决我遇到的限制。
我可以牺牲 WCF 方法并采用原始的 NamedPipe 方法。
【问题讨论】:
-
您确定 Windows 服务在桌面应用程序运行后尝试打开通道吗?当windows服务“看不到”WCF端点时,异常的细节是什么?
-
>#1 : 是的,我敢肯定,因为 winservice 会定期执行此操作(通过 wcf 调用)(无限循环)。
-
>#2:winservice“看不到”意味着在调用 wcf 代理时出现以下异常:“管道端点 'net.pipe://localhost/HeartBeat' 不能可以在您的本地计算机上找到”
标签: wcf security winapi named-pipes netnamedpipebinding