クライアント側では、プロキシの状態を処理して、State==CommunicationState.Faulted のときに自動的に Abort() を呼び出し、CommunicationState.Closed に正常に遷移するようにします。サーバー側では、コールバック チャネルに接続された 2 つのイベントがあります。
OperationContext.Current.Channel.Faulted += Channel_Faulted;
OperationContext.Current.Channel.Closed += Channel_Closed;
これが私のイベントコードです
private void Channel_Closed(object sender, EventArgs e)
{
var callback = sender as IPtiCommunicationCallback;
PtiClient client;
lock (syncObj)
{
client = clientsList.FirstOrDefault(x => x.Value == callback).Key;
}
if (client != null)
{
//Code to remove client from the list
Disconnect(client);
}
}
private void Channel_Faulted(object sender, EventArgs e)
{
(sender as ICommunicationObject).Abort();
}
ここで質問があります: デュプレックス チャネル (コールバック チャネル) の状態は、クライアントの状態に応じて自動的に遷移しますか? それとも、私が行ったように障害状態を処理する必要がありますか? ところで、NetTcpBinding を使用しています。