Почему значение Binding.CloseTimeout игнорируется? - PullRequest
2 голосов
/ 02 июня 2011

Сессионному клиенту присвоено значение Binding.CloseTimeout, установленное на 20 секунд:

<netTcpBinding>
  <binding name="NetTcpBinding_IService" closeTimeout="00:00:20" ...

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

»Соединение с сокетом было прервано.Это может быть вызвано ошибкой обработки вашего сообщения или превышением тайм-аута приема удаленным хостом, или проблемой основного сетевого ресурса.Тайм-аут локального сокета был '00: 00: 20 '. «

Почему значение CloseTimeout игнорируется клиентом?

спасибо

1 Ответ

2 голосов
/ 05 июля 2011

Представьте, что клиент и сервер - это люди, и у них встреча в полдень.

Клиент быстро появляется в полдень.Если сервера там нет, то клиент немедленно уходит, говоря: «Винт!»(выдает исключение).

Если сервер находится там , они начинают переговоры (устанавливают соединение).Если собрание длится менее CloseTimeout, это потому, что они пришли к соглашению (соединение установлено).Если у них заканчивается время для собрания, они прекращают свои переговоры (время попытки подключения истекло).

Чтобы вы не подумали, что я это выдумал, это подтверждается ответом на этот вопрос законченв MSDN :

EncpointNotFoundException обычно возникает, если не удается найти службу по указанному адресу.Это исключение будет выдано немедленно.Но если служба найдена, но сеансовый канал не может быть установлен в течение 20 секунд, вы столкнетесь с ошибкой тайм-аута.

...