Клиент времени ожидания WCF против сервера

Может кто-нибудь объяснить мне, в чем разница между конфигурацией тайм-аута на сервере vesus на клиенте? Например, что произойдет, если клиент установит sendTimeout на 5 минут, пока настройка на сервере установлена ​​на 1 минуту? Преобладает ли клиент с момента его начала?

Спасибо за вашу помощь!

Ответ 1

Чем меньше значение выигрывает - если у вашего клиента 5 минут, но на сервере всего 1 минута - вызов истечет через 1 минуту.

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

Ответ 2

Я думаю, что получил это, посмотри http://omsite.blogspot.com/2008/04/playing-with-wcf-nettcpbinding-timeouts.html.

Когда клиент инициирует вызов на сервер, на стороне клиента sendTimeout и на стороне сервера receiveTimeout действуют. Клиент должен отправить (или нажать) все данные до того, как истечет время, на которое истекает время, на которое истекает установленное на сервере время. Сервер должен завершить свою работу и вернуть результаты обратно клиенту до истечения срока действия sendTimeout, установленного на клиенте.

Если роли меняются на противоположные, означает, что сервер открывает связь с клиентом (например, в обратном вызове и т.д.), тогда sendTimeout на сервере и receiveTimeout на клиенте входят в игру.

Существует также OpenTimeout и CloseTimeout, которые управляют установлением тайм-аутов соединения каналов и работают на более низких уровнях каналов (линейные сокеты и т.д.).

Ответ 3

В тестах сценарий, который вы задали. Тайм-аут запроса составляет 5 минут, который был определен в клиенте

В тайм-аутах на стороне клиента

SendTimeout - используется для инициализации OperationTimeout, который регулирует весь процесс отправки сообщения, включая получение ответного сообщения для операции запроса/ответа. Этот тайм-аут также применяется при отправке ответных сообщений из метода контракта обратного вызова.

ReceiveTimeout - не используется

В тайм-аутах на стороне службы

SendTimeout те же, что и на клиенте

ReceiveTimeout - используется слоем Service Framework для инициализации тайм-аута простоя сеанса, который контролирует, как долго сеанс может простаивать до истечения времени ожидания.

См. https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-timeout-values-on-a-binding