我正在运行一个 Windows 服务,我通过 NetNamedPipeBinding 向该服务发送消息。消息从由 GPO 触发的客户端应用程序发送。我刚刚在新服务器上安装了服务和客户端,我收到以下消息:
System.ServiceModel.EndpointNotFoundException:
There was no endpoint listening at
net.pipe://localhost/VOXAServices/VOXADefaultPipe that could accept the
message. This is often caused by an incorrect address or SOAP action.
See InnerException, if present, for more details.
没有内在的例外。如果我通过双击桌面上的图标来运行客户端应用程序,它就可以正常运行。我管理 Windows 服务和客户端应用程序的代码,因此我可以更改我需要的任何内容。但到目前为止,我非常确信绑定、合同和地址都是正确的(因为从桌面运行时一切都运行良好)。我相信问题一定出在从 GPO 运行的客户端应用程序上。但我想不出任何原因会导致此错误。
更新:
我在微软的网站上读到了这个:
命名管道是 Windows 操作系统内核中的一个对象,例如进程可用于通信的共享内存部分。命名管道有一个名称,可用于单机进程之间的单向或双工通信。
如果需要在单台计算机上的不同 WCF 应用程序之间进行通信,并且您希望阻止来自另一台计算机的任何通信,则使用命名管道传输。另一个限制是,从 Windows 远程桌面运行的进程可能会被限制在同一个 Windows 远程桌面会话中,除非它们具有提升的权限。
(选择运输,重点补充)
我需要客户端进程在(非特权)用户的上下文中运行,并且弹出 UAC 对话框不是一个选项。无论如何,我是否可以赋予此客户端进程提升的权限,同时保持该进程在用户上下文中运行并且不使用户具有特权?
更新#2:
似乎存在全局和本地(对于 Windows 会话)命名管道之类的东西。我相信我的 Windows 服务正在创建一个本地命名管道,如果我可以强制它创建一个全局命名管道,它将解决我的问题。(这解释了为什么我在 sysinternals“进程资源管理器”中看不到我的管道,即使我的客户端应用程序可以在我从特权会话中启动它时找到它)。问题是,我不知道(而且似乎无法找出)如何强制全局创建命名管道(c#)。有任何想法吗?