2014-01-30 58 views
5

我有一個應用程序可以在同一個盒子的不同用戶會話下同時處於活動狀態。它由一個客戶端和一個服務器組成,兩者都在交互式用戶下運行,並通過WCF通過命名管道進行通信。WCF與不同用戶會話下的命名管道

如果我創建一個WCF服務器監聽,比如說「net.pipe:// localhost/MyService」...服務器進程的兩個實例不能在同一個用戶會話下存在,但是WCF允許兩個使用此服務器的服務器不同用戶會話下相同的基地址。

這是我的問題;

  • 如果WCF不使用URI作爲管道名稱,客戶端如何找到服務器?

  • WCF如何讓我的服務器的兩個實例在不同的用戶會話下運行,避免相互干擾? (例如,用戶會話下客戶端「A」總是與下用戶會話「A」的服務器和從未服務器用戶會話下運行「B」連通)預先

感謝。

回答

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

+0

感謝您的聯繫和答覆。這清除了我的東西! – john