WCF - закрытие дуплексных блоков ServiceHost на время CloseTimeout, если оно закрыто, когда клиент (-ы) подключен

У меня есть служба Windows, которая содержит три разных дуплексных канала WCF. Клиенты могут подключаться, чтобы получать обновления, отправленные им по контракту с обратным вызовом. По сути, есть три канала паб-суб.

Эта услуга отнимает много времени, когда клиенты подключены. Призыв к ServiceHost.Close Возвращение занимает 10 секунд (поэтому остановка службы занимает более 30 секунд.) Оказывается, мой closeTimeout в конфиге это 10 секунд. Изменение этого значения указывает на то, что это является причиной проблемы.

Что мне нужно сделать, чтобы быстро закрыть канал? Мне не нравится идея, что время истекает. Я мог позвонить Abort, но кажется, что должен быть лучший путь. Я не видел этого на недуплексных каналах раньше, поэтому предположим, что это как-то связано с дуплексом.

В идеале клиент должен быть немедленно уведомлен о сбое в работе канала, чтобы пользователь мог сразу увидеть, что обновления приостановлены.

2 ответа

"В идеале клиент должен быть немедленно уведомлен о сбое в работе канала, чтобы пользователь сразу увидел, что обновления приостановлены".

В экземпляре клиента WCF есть события, на которые вы можете подписаться:

  • Закрыто
  • закрытие
  • разорванный
  • открытый
  • Открытие.

Событие Faults возникает, как только ваш дуплексный канал останавливается по любой причине.

Интересно, почему ваш хост-сервис занимает более 30 секунд? Можете ли вы предоставить пример кода?

Вероятно, лучший способ - уведомить клиента (у вас есть дуплекс, поэтому вы можете) и позволить клиенту закрыть канал.

Другие вопросы по тегам