为什么命名管道WCF服务拒绝Windows服务客户端?

Tim*_*nes 6 wcf named-pipes transport

在Windows 7和.NET 4上,当我的WCF客户端是Windows服务时,我从WCF命名管道传输中获得了一些非常奇怪的效果.

我的WCF服务托管在用户模式应用程序中,并通过命名管道绑定公开.

我的WCF客户端是一个Windows服务,作为网络服务运行(如果它作为本地系统运行,我得到相同的结果).

如果我的用户模式应用程序(即WCF服务)作为域管理员运行,那么它工作正常,但如果用户模式应用程序是普通用户(或本地管理员),则通过CommunicationObjectFaultedException拒绝连接.

我在这里看到了一些与UAC有关的问题,但我还没有看到任何可以使命名管道传输正常工作的实际解决方案.这只是一个不可避免的框架错误吗?

Tim*_*nes 4

来自 Christian Weyer 的博客文章处理 WCF 命名管道场景中的操作系统权限“问题”

如果我使用基于命名管道的端点的 WCF 服务器进程没有创建全局内核对象的权限,它会默默地失败并创建一个本地对象,该对象对其会话之外的进程不可见。

因此,没有创建全局内核对象权限的进程打开的基于命名管道的通信机制(WCF 或其他)将无法从其自己的会话外部接收消息。

这似乎是意外后果法则的一个例子,对安全性的限制实际上会导致人们被迫使用网络可见传输而不是本地机器 IPC 机制,从而打开更多的安全漏洞。MS确实应该为WCF提供适当的IPC通道,因为当前的命名管道传输不会切断它。

问题是,这并不是一个特别不寻常的场景,因为 .NET 服务想要与 .NET 托盘应用程序通信以提供用户通知。从托盘应用程序到服务的轮询机制将起作用......但轮询速度慢且资源密集,我想避免它。

有人知道更好的定制 IPC 传输吗?

蒂姆