WCFサービスとクライアントのペアがあります。クライアントのファクトリメソッドでOpen()を呼び出して、呼び出す前にサービスが利用可能であることを確認してきました。何かのようなもの:
MyClient GetClient()
{
MyClient client = new MyClient();
try
{
client.Open();
return client;
}
catch(Exception)
{
//perform an (important) error-handling here
}
}
このように、発信者コードは次のようになります。
client = factory.GetClient();
client.CallMethodInTheService();
また、エラー処理について心配する必要はありません。
これは、wshttpbindingでセキュリティモードをWindowsに設定し、clientCredentialTypeをWindowsに設定した場合に機能します。client.Open()は、サービスが利用できない場合に例外をスローするため、エラー処理コードが実行されます。ただし、現在、Windowsクレデンシャルベースのセキュリティを使用できない環境に展開しているため、セキュリティモードをnoneに設定します。ただし、これにより、サービスが利用できない場合にclient.Open()が例外をスローしなくなりました。また、ファクトリのcatchブロックでこのコードに依存しているため、問題が発生します。
メッセージセキュリティを使用するときにOpen()が例外をスローするが、セキュリティを無効にするときに例外をスローしない理由は何ですか?セキュリティがnoneに設定されている場合、どのようにして同様の可用性チェックを実行できますか?個々の呼び出しごとにエラー処理を伴うtrycatchを配置することは良い解決策ではないと思います。ファクトリメソッドがクライアントオブジェクトを返す前にサービスの可用性をチェックする別の方法はありますか?