5

这是我的问题的一个简单示例。我正在编写一个应用程序,它自己托管 WCF 服务,仅在用户会话中进行通信。当多个用户在终端服务机器上同时运行这个应用程序时,只要他们没有本地管理员权限,所有用户都会很高兴。如果两个或更多用户是管理员,问题就开始了,第一个用户创建服务,第二个用户因为服务已经在全球范围内创建......

没有 WCF 的简单 Win32 实现将创建一个带有“Local\”前缀的命名管道。WCF 似乎首先尝试创建全局共享内存映射,然后失败,然后创建本地映射。

有没有人找到一种方法来自托管当前用户会话本地的 WCF 服务,即使用户是本地管理员?

4

1 回答 1

1

简单的方法是让每个实例使用不同的服务 URL(从用户会话的某些特征中派生它以使其唯一 - 例如会话登录 ID)。

如果 WCF 绑定以足够的权限运行,则无法阻止 WCF 绑定在全局命名空间中发布其端点详细信息(也称为真实管道名称)。但也许您可以在打开服务主机之前调整进程令牌权限以禁用 SeCreateGlobalPrivilege,如果您的服务发现它以具有提升权限的管理员身份运行。

于 2013-01-30T23:44:24.347 回答