2012-02-19 49 views
2

我有一個簡單的WCF服務,用於在我們的應用中進行跨應用程序域通信。測試命名管道綁定是否可用或已在使用中

服務經由NamedPipeBinding暴露,目前使用的是硬編碼名稱:

VAR地址= 「net.pipe://本地主機/應用程序/登錄」;

 NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None); 
     binding.ReceiveTimeout = TimeSpan.MaxValue; 
     binding. 
     logServiceHost = new ServiceHost(typeof(LogService)); 
     logServiceHost.AddServiceEndpoint(typeof(ILogProvider), binding, address); 

     logServiceHost.Open(); 

的問題是,這個名字是硬編碼的,因此我們的應用程序的另一個實例,不能分配一個新的命名管道(因爲該名稱已採取了)。

是否有可能檢查名稱是否已被佔用,如果是,則分配一個不同的名稱?

或者還有其他更簡單的策略來處理這種情況?

回答

3

你基本上試圖做'多實例意識'服務。典型的做法是讓每個服務實例宣佈它存在。要做到這一點,最好的方法是使用添加公告端點:

var discoveryBehavior = new ServiceDiscoveryBehavior(); 
discoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint()); 
logServiceHost.Description.Behaviors.Add(discoveryBehavior); 
logServiceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint()); 
logServiceHost.Open(); 

以後可以發現網絡中現有服務的每個實例,並採取必要的措施,以防止端點URI的衝突,如果需要的話。

您可以通過鏈接瞭解關於WCF Auto Discovery行爲的更多信息。

相關問題