С#: время ожидания не соответствует прошедшему времени

У меня есть приложение, которое подключается к службе (webserviceSoap1), и эта служба имеет следующую конфигурацию времени ожидания:

<binding name="webserviceSoap1" 
         openTimeout="00:10:00" 
         closeTimeout="00:10:00" 
         sendTimeout="00:10:00"
         receiveTimeout="00:10:00">

Насколько я понимаю, я заявляю здесь, что все тайм-ауты должны ждать не менее 10 минут, чтобы завершить связь и получить System.TimeoutException. Однако вот проблема, которую я не понимаю. Примерно через 2-3 минуты я получаю TimeoutException, в котором говорится, что программа ждала ответа почти десять минут (что невозможно), и там же написано, что прошло около двух минут.

Исключение тайм-аута говорит, что оно ждало почти 10 минут, но истекшее время составляет около двух минут

Почему разрыв во времени? Правильно ли я настраиваю значения привязки?

Если я изменю значения тайм-аутов на «10:00:00», процесс завершится правильно. Однако, по-прежнему используя «01:00:00», что, как я понимаю, составляет час, процесс прерывается через 4 минуты, говоря, что он ждал «00:59:59.16472» перед отправкой исключения TimeoutException.


person Luis Art Guerra    schedule 07.09.2018    source источник
comment
не могли бы вы загрузить свой код?   -  person Or Yaacov    schedule 08.09.2018
comment
Благодарю за ваш ответ. К сожалению, я не могу поделиться кодом (он принадлежит моей компании). Я хотел бы знать, является ли проблема нормальной. Это то, что происходит, или это признак плохой конфигурации в IIS или в моем файле web.config? Я знаю, что без кода это почти как угадывать, но любая подсказка может помочь мне найти правильный путь.   -  person Luis Art Guerra    schedule 08.09.2018
comment
Если вы не можете поделиться кодом, сократите его до отдельного минимально воспроизводимого примера. В процессе вы можете найти проблему самостоятельно (в этом случае вы можете опубликовать ответ). Если вы не можете его найти, поделитесь MCVE (с этим не должно возникнуть проблем, поскольку в нем не будет ничего особо ценного), чтобы другие могли вам помочь.   -  person Richardissimo    schedule 08.09.2018


Ответы (1)


Проблема была обнаружена в балансировщике нагрузки, который управлял подключением клиента к серверу. И клиент, и служба были настроены на 10-минутное ожидание тайм-аута. Однако у балансировщика нагрузки была только одна минута, и поэтому тайм-аут возникал раньше, чем ожидалось.

Я прошу администраторов балансировщика нагрузки изменить его на 10 минут, и все работает как положено.

Однако то, как тайм-аут сообщается клиенту, вводит в заблуждение, поскольку в нем говорится, что установленный тайм-аут уже достиг предела, хотя это не так.

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

Я надеюсь, что это поможет любому получить подобное поведение.

person Luis Art Guerra    schedule 20.09.2018