WCF在不同的用户会话下具有命名管道

时间:2014-01-30 21:37:32

标签: wcf session pipe

我有一个可以在同一个盒子上的不同用户会话下同时激活的应用程序。它由客户端和服务器组成,两者都在交互式用户下运行,并通过命名管道通过WCF进行通信。

如果我创建一个正在侦听的WCF服务器,比如说“net.pipe:// localhost / MyService”...服务器进程的两个实例在同一个用户会话下不能存在,但是WCF允许两个使用它的服务器不同用户会话下的基地址。

以下是我的问题;

  • 如果WCF不使用URI作为管道名称,客户端如何找到服务器?

  • WCF如何保持我的服务器的两个实例(在不同的用户会话下运行)不会相互干扰? (例如,用户会话'A'下的客户端始终在用户会话'A'下与服务器通信,而服务器从不在用户会话'B'下运行

提前致谢。

1 个答案:

答案 0 :(得分:2)

WCF生成GUID并将其用作命名管道的名称。

URI用于派生共享内存对象的位置。服务器实际上将使用要使用的命名管道的GUID创建该共享内存对象。客户端将读取共享内存对象以获取GUID。

此共享内存对象受限于用户会话。不同的用户会话意味着不同的命名管道。

参考文献:

http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and-how-to-find-the-actual-windows-object-name.aspx

https://stackoverflow.com/a/10342690/107177