Как работают тайм-ауты в WCF? Я знаю, например, что вы можете настроить sendTimeout и receiveTimeout для привязки клиентов. Но как они работают?
MSDN описывает sendTimeout как:
A TimeSpan value that specifies the interval of time provided for a send operation to complete. This value should be greater than or equal to Zero. The default is 00:01:00.
Что такое операции отправки / получения?





Сторона клиента:
Сторона сервера:
Источник - Брайан Макнамара на форумах MSDN.
Моя служба WCF копирует файлы и возвращает обратные вызовы о ходе выполнения. Время истекло. После прочтения этого ответа я увеличил все значения тайм-аута, кроме ReceiveTimeout, несмотря на сообщение об ошибке WCF, в котором говорилось об увеличении ReceiveTimeout. Это не сработало. По крайней мере, в моем случае сработало увеличение ReceiveTimout.
Я обнаружил, что эта тема носит слишком общий характер: WCF, развернутый в Cassic и Integrated Pipeline, демонстрирует различное поведение при тайм-ауте. Этот ответ может удовлетворить «родной» WCF, такой как netTcpBinding, но в случае WCF, управляемого Httphandler, например, basichttpbinding, если вы выполняете очень длинное задание с привязкой к ЦП внутри операционного контракта, IIS может УБИТЬ WCF до закрытия (на стороне сервера) !! В этом случае я предлагаю пересмотреть таймауты Пул приложений IISтакже, таймауты ping и выключения
Просто проясните OperationTimeout. Согласно моим тестам, OpenTimeout и SendTimeout не имеют ничего общего со временем, затрачиваемым уровнем бизнес-логики на другой стороне (то есть на стороне обслуживания) для завершения логики работы. Время, затрачиваемое логикой операции, фактически регулируется OperationTimeout. Например, если установить OpenTimeout на 1 минуту и OperationTimeout на 2 минуты, после того, как клиент wcf успешно установит соединение с сервером, логика операции будет запущена, а затем db займет 3 минуты, теперь это не вызовет OpenTimeout, но вызовет OperationTimeout.
В дополнение к тому, что было в этом посте, на стороне клиента также определено время ожидания операции. Посмотри это:
См. «Тайм-ауты в WCF и их значения по умолчанию» http://blogs.msdn.com/b/hongmeig/archive/2010/03/06/timeouts-in-wcf-and-their-default-values.aspx
Timeouts on binding-SendTimeout, ReceiveTimeout, OpenTimeout and CloseTimeout. They can be set easily either through config or code on the Binding. The default value for those are 1 minute.
ServiceHost has OpenTimeout and CloseTimeout. Default for OpenTimeout is 1 minute, and default for CloseTimeout is 10 seconds.
Timeouts on client side channel. There is an OperationTimeout, which you can set it by casting the channel to IContextChannel. The default for this is also 1 minute. Ttimeout on tcp transport, called ChannelInitializationTimeout, and its default value is 5 seconds.
ASPNET. There are shutdown timeout, just like the service host close timeout, default is 90 seconds. ExecutionTimeout, just like our operation timeout, default is 110 seconds.
Если я устанавливаю OperationTimeout на очень высокое значение, а sendTimeout на смехотворно маленькое значение, которое, по сути, должно истекать по таймауту, я никогда не получаю исключение тайм-аута. Может ли кто-нибудь сказать мне, как я могу настроить пример для запуска исключения sendTimeout?