WCF仅本地命名管道
这是我的问题的一个简单例子。我正在编写一个应用程序,它自己托管一个WCF服务,只用于用户会话中的通信。当多个用户在终端服务计算机上同时运行此应用程序时,所有用户都很高兴,只要他们没有本地管理员权限。如果两个或多个用户是管理员,则问题开始出现,第一个用户创建服务,第二个用户创建服务,因为服务是全局创建的 没有WCF的简单Win32实现将创建一个带有“Local\”前缀的命名管道。WCF似乎首先尝试创建全局共享内存映射,失败后,再创建本地映射WCF仅本地命名管道,wcf,named-pipes,self-hosting,usersession,Wcf,Named Pipes,Self Hosting,Usersession,这是我的问题的一个简单例子。我正在编写一个应用程序,它自己托管一个WCF服务,只用于用户会话中的通信。当多个用户在终端服务计算机上同时运行此应用程序时,所有用户都很高兴,只要他们没有本地管理员权限。如果两个或多个用户是管理员,则问题开始出现,第一个用户创建服务,第二个用户创建服务,因为服务是全局创建的 没有WCF的简单Win32实现将创建一个带有“Local\”前缀的命名管道。WCF似乎首先尝试创建全局共享内存映射,失败后,再创建本地映射 是否有人找到了一种方法来自行托管当前用户会话本地的WCF
是否有人找到了一种方法来自行托管当前用户会话本地的WCF服务,即使该用户是本地管理员?简单的方法就是让每个实例使用不同的服务URL(从用户会话的某些特征中派生出来,使其唯一-例如会话登录ID)
如果WCF绑定以足够的权限在全局命名空间中发布其端点详细信息(也称为真正的管道名称),则无法停止该绑定。但是,如果您的服务发现它以管理员身份以提升权限运行,您可以在打开服务主机之前调整进程令牌权限以禁用SeCreateGlobalPrivilege。看起来不错,我只是不明白为什么microsoft在使用namedpipes时没有指定作用域。。。