У меня есть собственный wcf-сервис, использующий дуплексный обратный вызов net tcp
на стороне клиента, я прослушиваю сбойное событие на Channel и ChennelFactory.когда канал вышел из строя, клиент будет воссоздавать канал и повторно подписываться.
на стороне сервера, я сохраняю канал обратного вызова и сохраняю ссылку на канал, вызывая OperationContext.Current.Channel
, чтобы я мог прослушивать неисправный изакрытое событие на этом канале.При сбое сервер удалит этого подписчика.
Это работает большую часть времени, пока в последнее время я не наблюдал неожиданное поведение: канал обратного вызова сбой на сервере, но канал на стороне клиента выглядит нормально, это приводит кклиент не выполняет повторную подписку, в то время как сервер уже удалил этого абонента, и клиент не получит никакого обратного вызова.
Я думал, что при дуплексной связи, если обнаружена ошибка одного конца, дуплексный канал должен быть неисправен.
Включен надежный сеанс, и время ожидания очень велико (2 часа) (может быть, это может привести к тому, что клиентский конец не будет достаточно быстро обнаруживать ошибку?)
Может кто-нибудь объяснить, почему это происходит?
Еще один вопрос: почему это так?У меня подключено 40 клиентов, но сервер обнаружил случайный сбой клиента в случайное время.