Мой сервисный хост настроен на закрытие соединения через 10 минут
<wsHttpBinding>
<binding receiveTimeout="00:10:00">
</wsHttpBinding>
В коде моего клиента перед использованием сервиса он проверен.Если он находится в закрытом / неисправном состоянии, он создаст новый.
public static T ValidateService<T>(ref T service) where T : class
{
if (service is IClientChannel)
{
IClientChannel channel = service as IClientChannel;
CommunicationState state = channel.State;
if (state == CommunicationState.Faulted || state == CommunicationState.Closed)
{
// thread safe logic to create new service
}
}
}
Проблема в том, что канал закрыт на стороне сервера и channel.State по-прежнему будет возвращать состояние Open.После выполнения удаленного вызова я получаю исключение, вызванное ошибкой, и из-за receiveTimeout
.
Есть ли какой-либо способ установить тайм-аут неактивности на стороне клиента?что-то вроде receiveTimeout="00:10:00"
на сервере, но с несколькими секундами меньше, поэтому я могу приятно закрыть канал от клиента, если он не используется, и тогда моя логика ValidateService<T>
создаст новый, если это необходимо.
По соображениям производительности я делаюЯ не хочу создавать новый канал для каждого удаленного вызова, потому что они могут быть очень частыми.
Я бы хотел избежать использования опроса сердцебиения для каждой из моих услуг, которые я использую в своем общении.
Спасибо