c# - 如何仅在同一用户的登录 session 中使用 WCF NetNamedPipesBinding 进行进程间通信?

标签 c# .net wcf netnamedpipebinding

我希望在同一用户的登录 session 中运行的两个进程通过 WCF 进行通信。 NetNamedPipesBinding 似乎最适合这个。但是可能有多个用户登录并运行这些进程,所以我想要一种方法来确保每个进程只与同一用户的登录 session 中的其他进程通信。此外,理论上每个用户都可以多次登录同一台机器 - 同样,不同登录 session 中的进程不应相互交谈。

我不是特别关心安全性(不像 this question ),这只是一个问题,让每个进程只与同一用户 session 中的另一个进程对话。

一种解决方案是将唯一的登录 session ID 添加到端点地址,但我不确定如何获得唯一的登录 session (请参阅 my question on this here)。我认为 WCF 中可能有一些方法可以解决这个问题,或者有一种标准的方法来解决这个问题。

最佳答案

如果你能确定:

  1. 进程从不运行 提升权限(运行方式 行政人员);和
  2. 您将始终在 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/

相关文章:

c# - 替换单个空格而不替换多个空格

c# - HTML Agility Pack - 从 SPAN 标签内的第一个 STRONG 标签获取文本

c# - C++ 到 .NET : I need help with understanding C++ code to convert it to . NET

c# - 为什么 CLR 为匿名方法创建新类?

.net - LINQ Order BY 在 VB.NET 中使用文字值?

WCF RIA 和 Azure 访问控制服务

c# - 在.NET 中快速检查或限制线程内存使用?

.net - 在WPF中使用OpenFileDialog时没有文件的文件夹路径?

来自不断增长的文件的 C# WCF 视频流?

wcf - 没有 WCF 数据服务的 OData 服务