Кажется, существует распространенное заблуждение, что для того, чтобы выяснить на стороне клиента, является ли сеанс WCF все еще живым, необходимо реализовать какую-либо пользовательскую операцию проверки связи или проверки пульса в службе. Однако инфраструктура WCF, если она настроена правильно, уже делает это для вас в фоновом режиме.
Хитрость заключается в том, чтобы установить ReliableSession.InactivityTimeout на достаточно короткий период. Например, если вы установите его на 30 секунд, то событие ICommunicationObject.Faults будет вызвано на клиентском прокси через 30 (минимум) до подтверждения. 45 (максимум) секунд после отказа службы. Точная задержка зависит от ритма таймера контроля активности внутреннего сеанса WCF и конкретного времени сбоя.
Конечно, это может работать только для привязок с поддержкой надежного сеанса в сочетании с правильными свойствами сеанса (ServiceContractAttribute.SessionMode, ServiceBehaviorAttribute.InstanceContextMode, OperationContractAttribute.IsInitiating и OperationContractAttribute.It.