私は WCF を学んでおり、本で学んだことからさまざまな例を試しています。
次のような簡単なサービス設定があります。
[ServiceContract]
interface MyService
{
[OperationContract(IsOneWay = true)]
void Throws();
}
私のクライアント コードは ChannelFactory クラスを使用してプロキシを作成しています。
var baseTcpAddress = new Uri("net.tcp://localhost/hello");
var tcpBinding = new NetTcpBinding();
// Create client channel.
ChannelFactory<ITestService> factory = new ChannelFactory<ITestService>(tcpBinding, new EndpointAddress(baseTcpAddress));
var channel = factory.CreateChannel();
var commObject = channel as ICommunicationObject;
commObject.Faulted += commObject_Faulted;
commObject.Closed += commObject_Closed;
このメソッドが呼び出されると、ハンドルされない例外 (FaultException から派生したものではない) がスローされ、同じプロキシを使用する後続の呼び出しで例外がスローされ、チャネルに障害が発生します。
問題は、プロキシ チャネルのFaultedイベントに登録されていることですが、プロキシにアクセスしようとした場合にのみ通知が届きません。
私の質問は、どのようにしてクライアントが障害のあるプロキシから自身を保護できるかということです。プロキシは、クライアントに試して使用させるのではなく、使用できないことをクライアントに通知するべきではありませんか?