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