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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 18 июля 2012

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

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

  • Закрыто
  • Закрытие
  • Faulted
  • Открыт
  • Открытие.

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

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

0 голосов
/ 26 июля 2011

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

...