同じマシンで二重の WCF サービスとクライアントを実行しています。クライアントは 15 秒のタイムアウトを持つように構成されています。
<binding name="NetTcpBinding_IServiceIPC" closeTimeout="00:00:15"
openTimeout="00:00:15" receiveTimeout="00:00:15" sendTimeout="00:00:15" />
クライアントは次のような障害を処理しています。
client.InnerChannel.Faulted += FaultHandler;
client.InnerDuplexChannel.Faulted += FaultHandler;
client.ChannelFactory.Faulted += FaultHandler;
Service プロセスを強制終了すると、クライアントはTimeoutException
15 秒後に正しく取得します。
This request operation sent to net.tcp://localhost:8732/Service/ did not receive a reply within the configured timeout (00:00:15). The time allotted to this operation may have been a portion of a longer timeout. This may be because the service is still processing the operation or because the service was unable to send a reply message. Please consider increasing the operation timeout (by casting the channel/proxy to IContextChannel and setting the OperationTimeout property) and ensure that the service is able to connect to the client. (System.TimeoutException)
ただし、この時点ではチャネルに障害は発生していません。Service プロセスを強制終了してから約 5 分後まで、フォルト ハンドラが呼び出されません。TimeoutException
チャンネルに障害があると思いましたが(この回答を参照)、どういうわけかそうではないようです。サービスプロセスが強制終了された後、チャネルをより迅速に障害状態にする方法はありますか?