Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用WCF NetNamedPipesBinding仅在相同用户中的进程之间进行通信';登录会话?_C#_.net_Wcf_Netnamedpipebinding - Fatal编程技术网

C# 如何使用WCF NetNamedPipesBinding仅在相同用户中的进程之间进行通信';登录会话?

C# 如何使用WCF NetNamedPipesBinding仅在相同用户中的进程之间进行通信';登录会话?,c#,.net,wcf,netnamedpipebinding,C#,.net,Wcf,Netnamedpipebinding,我希望在同一用户的登录会话中运行两个进程,并通过WCF进行通信。NetNamedPipesBinding似乎最适合这种情况。但是可能有多个用户登录并运行这些进程,因此我需要一种方法来确保每个进程只与同一用户登录会话中的其他进程对话。理论上,每个用户都可以多次登录到同一台机器上——这里,不同登录会话中的进程不应该相互对话 我并不特别关心安全性(与之不同),这只是一个问题,即在同一个用户会话中,每个进程只与另一个进程对话 一种解决方案是向端点地址添加唯一的登录会话id,但我不确定如何获得唯一的登录会

我希望在同一用户的登录会话中运行两个进程,并通过WCF进行通信。NetNamedPipesBinding似乎最适合这种情况。但是可能有多个用户登录并运行这些进程,因此我需要一种方法来确保每个进程只与同一用户登录会话中的其他进程对话。理论上,每个用户都可以多次登录到同一台机器上——这里,不同登录会话中的进程不应该相互对话

我并不特别关心安全性(与之不同),这只是一个问题,即在同一个用户会话中,每个进程只与另一个进程对话


一种解决方案是向端点地址添加唯一的登录会话id,但我不确定如何获得唯一的登录会话(请参阅)。我想可能会有一些方法被烘焙到WCF中,或者有一种标准的方法来实现这一点。

如果您可以确定:

  • 这些进程永远不会与一起运行 提升的权限(以身份运行) 管理员);及
  • 您将始终在Vista/Win7或更高版本上运行
  • 然后,默认情况下,您将使用WCF获得所需的内容

    这是因为,如果承载WCF服务的进程没有足够的权限(SeCreateGlobalPrivilege),NetNamedPipeBinding用于发布实际管道名称(基于GUID)的共享内存机制将由登录会话自动确定范围为了使其全局可见:仅当进程具有此权限时,命名的共享内存区域才会放在“全局”内核命名空间中,否则会放在与用户会话相关的“本地”内核命名空间中


    遗憾的是,WCF没有提供任何方式来指定您不希望它甚至考虑通过“全局”命名空间发布管道。因此,如果上述条件1和2不能得到保证,我能想到的唯一方法就是按照您的建议,使用基于唯一登录会话ID的名称命名端点。获取登录SID有点费劲,需要对Win32 API进行非常简单的P/Invoke操作,但我看您已经做到了。

    太好了,谢谢!手指交叉了一些命名管道功能,使其成为wcf绑定的某个时候。(在我的例子中,我不能确定是1还是2,所以我将使用端点名称,但很高兴知道没有更简单的方法)。