Я разрабатываю клиент-серверное приложение в .Net 3.5 с использованием WCF. По сути, долго работающий клиентский сервис (на нескольких машинах) устанавливает дуплексное соединение с сервером через netTcpBinding. Затем сервер использует контракт обратного вызова клиента для выполнения определенных операций по требованию, на которые клиент отвечает асинхронным образом (я думаю, что это довольно стандартная вещь). Я подкласс класса DuplexClientBase для обработки большей части связи.
К сожалению, когда что-то идет не так с обеих сторон (например, сбой сети, неожиданное исключение и т. Д.), Канал выходит из строя / прерывается и все последующие операции завершаются неудачно. Я обошел это ограничение в недуплексных каналах, создав класс RecoveringClientBase, который автоматически обнаруживает ошибку клиента и повторяет операцию.
Итак, мой вопрос: существует ли установленный способ определения, когда дуплексный канал вышел из строя? Где я должен проверить это, на сервере или на клиенте? В противном случае, какие варианты у меня есть, чтобы гарантировать, что соединение будет восстановлено?
Обновление: Я ищу совет, относящийся к дуплексным каналам, где сервер может попытаться использовать канал обратного вызова, который был неисправен. Таким образом, мне нужно что-то, что немедленно переподключится / перепишется, когда что-то случится с каналом. В данный момент я слушаю событие закрытия канала и воссоздаю его, если состояние не является закрытым. Это вроде работает, но кажется хакерским ...