2010-01-13 3 views
1

У меня есть следующие конфигурации для моего связывания:WCF - повторная попытка не работает?

<binding name="wshttp" openTimeout="00:01:00" sendTimeout="00:02:00" receiveTimeout="00:03:00" closeTimeout="00:04:00"> 
    ..snap 
    <reliableSession inactivityTimeout="00:05:00" maxRetryCount="8" ordered="true"/> 
    ..snap 
</binding> 

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

16: 37: 49242 INFO Запустить процесс
16: 39: 49588 FATAL Операция запроса не была завершена в течение отведенного времени таймаута 00:02:00

Таким образом, приложение выдает ошибку в течение 2 минут и не повторяет запрос. Что мне нужно сделать, чтобы начать повторную попытку?

ответ

3

Внедрение WS-ReliableMessaging в WCF не работает. Если срок действия прокси-сервера истечет, повторные попытки (дополнительные) не будут выполнены. Логика повторения протокола применяется к сообщениям, которые были переданы в базовый транспорт, но не были подтверждены на уровне RM, в конечном счете ограничены MaxRetryCount и InactivityTimeout.

Как только вы получите сообщение CommunicationException или TimeoutException с вашего прокси-канала, вы можете рассмотреть завершение сеанса. На этом этапе вам нужно будет снова подключиться и начать работу (или если вы знаете, где вы «остановились» и сохраните какое-то состояние, которое вы, возможно, сможете восстановить, - но эта логика будет вашей ответственностью за реализацию).

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

+0

Хм, не ответ, на который я надеялся, надеялся сделать все это в конфиге. –

Смежные вопросы