WCF - закрытие дуплексных блоков ServiceHost на время CloseTimeout, если оно закрыто, когда клиент (-ы) подключен
У меня есть служба Windows, которая содержит три разных дуплексных канала WCF. Клиенты могут подключаться, чтобы получать обновления, отправленные им по контракту с обратным вызовом. По сути, есть три канала паб-суб.
Эта услуга отнимает много времени, когда клиенты подключены. Призыв к ServiceHost.Close
Возвращение занимает 10 секунд (поэтому остановка службы занимает более 30 секунд.) Оказывается, мой closeTimeout
в конфиге это 10 секунд. Изменение этого значения указывает на то, что это является причиной проблемы.
Что мне нужно сделать, чтобы быстро закрыть канал? Мне не нравится идея, что время истекает. Я мог позвонить Abort
, но кажется, что должен быть лучший путь. Я не видел этого на недуплексных каналах раньше, поэтому предположим, что это как-то связано с дуплексом.
В идеале клиент должен быть немедленно уведомлен о сбое в работе канала, чтобы пользователь мог сразу увидеть, что обновления приостановлены.
2 ответа
"В идеале клиент должен быть немедленно уведомлен о сбое в работе канала, чтобы пользователь сразу увидел, что обновления приостановлены".
В экземпляре клиента WCF есть события, на которые вы можете подписаться:
- Закрыто
- закрытие
- разорванный
- открытый
- Открытие.
Событие Faults возникает, как только ваш дуплексный канал останавливается по любой причине.
Интересно, почему ваш хост-сервис занимает более 30 секунд? Можете ли вы предоставить пример кода?
Вероятно, лучший способ - уведомить клиента (у вас есть дуплекс, поэтому вы можете) и позволить клиенту закрыть канал.