我希望在同一用户的登录 session 中运行的两个进程通过 WCF 进行通信。 NetNamedPipesBinding 似乎最适合这个。但是可能有多个用户登录并运行这些进程,所以我想要一种方法来确保每个进程只与同一用户的登录 session 中的其他进程通信。此外,理论上每个用户都可以多次登录同一台机器 - 同样,不同登录 session 中的进程不应相互交谈。
我不是特别关心安全性(不像 this question ),这只是一个问题,让每个进程只与同一用户 session 中的另一个进程对话。
一种解决方案是将唯一的登录 session ID 添加到端点地址,但我不确定如何获得唯一的登录 session (请参阅 my question on this here)。我认为 WCF 中可能有一些方法可以解决这个问题,或者有一种标准的方法来解决这个问题。
最佳答案
如果你能确定:
- 进程从不运行 提升权限(运行方式 行政人员);和
- 您将始终在 Vista/Win7 或更高版本上运行
然后您将默认使用 WCF 获得您想要的东西。
这是因为如果托管 WCF 服务的进程没有足够的权限 (SeCreateGlobalPrivilege)使其全局可见:仅当进程具有此权限时,命名的共享内存区域才被放入“全局”内核 namespace ,否则它被放入与用户 session 相关的“本地”内核 namespace 。
不幸的是,WCF 没有提供任何方式来指定您甚至不希望它考虑通过“全局”命名空间发布管道。因此,如果不能保证上述条件 1 和 2,我能想到的唯一方法就是按照您的建议,使用基于唯一登录 session ID 的名称来命名您的端点。获取登录 SID 需要一些努力,需要对 Win32 API 进行非平凡的 P/Invoke,但我看到你已经 already found an answer on SO which shows how to do it .
关于c# - 如何仅在同一用户的登录 session 中使用 WCF NetNamedPipesBinding 进行进程间通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6061523/