这是我的问题的一个简单示例。我正在编写一个自托管WCF服务的应用程序,仅在用户会话中进行通信。当多个用户在终端服务计算机上同时运行此应用程序时,只要他们没有本地管理员权限,所有用户都会感到满意。如果两个或更多用户是管理员,第一个用户创建服务,第二个用户因为服务已在全球创建... ...
简单的Win32实现,没有WCF,将创建一个带有“Local \”前缀的命名管道。 WCF似乎首先尝试创建全局共享内存映射,然后失败,然后创建本地映射。
是否有人找到了自行托管当前用户会话本地WCF服务的方法,即使该用户是本地管理员?
答案 0 :(得分:1)
简单的方法是让每个实例使用不同的服务URL(从用户会话的某些特征中获取它以使其唯一 - 例如会话登录ID)。
如果WCF绑定在具有足够权限的情况下运行,则无法阻止WCF绑定在Global命名空间中发布其端点详细信息(也就是真实管道名称)。但是,如果您的服务发现它以具有提升权限的管理员身份运行,那么您可以在打开服务主机之前调整进程令牌权限以禁用SeCreateGlobalPrivilege。