2012-02-19 11 views
2

私は、アプリケーションでのクロスアプリケーションドメイン通信に使用される単純なWCFサービスを持っています。名前付きパイプバインディングが使用可能か、既に使用中であるかどうかをテストします。

VARアドレス= "net.pipe:// localhostの/アプリ/ログ"

サービスは現在、ハードコードされた名前を使用して、NamedPipeBindingを介して公開されます。

 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の詳細については、リンクをご覧ください。

関連する問題