Что происходит, когда происходит тайм-аут WebClientProtocol

У нас есть клиентское приложение, которое имеет ссылку на веб-сервис. Мы установили свойство timeout для объекта webclientprotocol равным 50 (мс) и хотели наблюдать, что происходит. Мы связали давно работающий веб-метод, который возвращает огромный DataSet клиенту. Когда было установлено значение по умолчанию, DataSet был возвращен клиенту должным образом. Когда мы изменили это на 50 (мс), мы ничего не наблюдали. Мы предполагали, что со стороны клиента будет какое-то исключение, которое происходит на стороне клиента. Может кто-нибудь объяснить, пожалуйста, что здесь происходит

Спасибо Радж

12.12.2008 06:34:13
2 ОТВЕТА

Документация, к сожалению, неясна. Когда вы говорите, что «ничего не наблюдали», что именно вы имеете в виду? Код навсегда завис? Было ли выброшено исключение? Предположим, действительный набор данных не был возвращен.

Я ожидаю, что будет сгенерировано TimeoutException , но я удивлен, что это не совсем очевидно в вашем клиентском коде. Вы не глотаете исключения, не так ли?

Вы выполняете вызов синхронно или асинхронно? Если он асинхронный, я ожидаю, что будет выполнен обратный вызов, а затем будет вызвано исключение при вызове EndXxx.

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

4
12.12.2008 07:13:00

Я просто столкнулся с этим. В веб-сервисе .NET 2.0 он выбрасывает довольно неопределенный характер WebException, и только Messageсвойство позволяет его различить:

Запрос был прерван: соединение было неожиданно закрыто.

Я не пробовал в ссылках службы WCF на основе сгенерированных по умолчанию в новых версиях Visual Studio, но если я понимаю это правильно, они бросают более полезные TimeoutException, который, как Джон тарелочки , я предположил бы (и предпочли бы ) быть поведением в веб-сервисе.

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

0
23.05.2017 12:04:12
Это на самом деле не отвечает на вопрос. Кроме того, вы смотрели в InnerExceptionсобственности?
John Saunders 22.03.2011 02:49:02
@ Джон Сондерс: Вопрос был в том, «Что происходит, когда происходит тайм-аут WebClientProtocol?» Ответ: «Выдает исключение WebException». Как это не отвечает на вопрос? И да, я посмотрел на InnerExceptionнедвижимость, надеясь найти там TimeoutExceptionисключение. К сожалению, это было ноль. Это было частью того, почему только текст сообщения отличал исключение от других возможных исключений WebException. Расстраивает, когда свойство, предназначенное только для потребления человеком, должно использоваться для программных решений.
P Daddy 22.03.2011 03:21:20