2014-01-27 5 views
2

У меня есть два приложения, подключенные дуплексным соединением WCF. Я хорошо работаю, пока соединение несовместимо.Сценарий повторного подключения в дуплексном WCF

Теперь я проверяю, как обращаться с сценариями повторного подключения, когда соединение потеряно и ему нужно снова подключиться. И я изо всех сил пытаюсь понять, как это работает в WCF.

Насколько я знаю, IChannel является расходным, но ChannelFactory стоит дорого. Поэтому я создаю один завод, а затем канал. Всякий раз, когда я обнаруживаю события или Faulted в канале, I try закрывает канал, отключает обработчики событий, а затем создает другой канал.

Но этот подход не работает очень хорошо, потому что иногда DuplexChannelFactory<T>.CreateChannel получает нарушенный, а также, и это бросает исключение:

System.ServiceModel.CommunicationObjectAbortedException occurred 
    HResult=-2146233087 
    Message=The communication object, System.ServiceModel.InstanceContext, cannot be used for communication because it has been Aborted. 

Как это возможно, что сам завод получает нарушенное таким образом?

Каков правильный подход к отключению/пересоединению в WCF?

ответ

0

Пытаясь ответить на эту часть: «Как это возможно, что сам завод получает нарушенный этот путь»

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

+0

Этот вопрос содержит агностик. Я хочу знать, как подойти к пересоединению. – vtortola

+0

Спасибо за разъяснение. Я пытался ответить на часть 1. Попробуем написать свои мысли о том, как обрабатывать пересоединения на основе того, что я сделал. –

1

Я бы не сказал, что это правильный способ делать вещи, но ....

Мой подход обрабатывать Отключения/переподключения является использование таймера (на клиенте), чтобы вызвать метод «пинг» на сервис по существующему соединению и при необходимости обновить его. Не знаю, есть ли лучший способ, а не то, что я не смотрел.

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