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





К сожалению, документация неясна. Когда вы говорите, что «ничего не наблюдали», что именно вы имеете в виду? Код завис навсегда? Было сгенерировано исключение? Предположительно, действительный DataSet не был возвращен.
Я бы выбрасывал ожидать a TimeoutException, но я удивлен, что это не совсем очевидно в вашем клиентском коде. Вы же не глотаете исключения, не так ли?
Вы выполняете вызов синхронно или асинхронно? Если это асинхронно, я бы ожидал, что будет выполнен обратный вызов, а затем будет выдано исключение при вызове «EndXxx».
Я настоятельно рекомендую вам написать короткое консольное приложение, которое просто вызывает веб-службу, просто чтобы посмотреть, что произойдет.
Я только что столкнулся с этим. В веб-сервисе .NET 2.0 он выдает довольно неопределенный WebException, и только свойство Message может отличить его:
The request was aborted: The connection was closed unexpectedly.
Я не пробовал использовать его в ссылках на службы на основе WCF, сгенерированных по умолчанию в более новых версиях Visual Studio, но если я правильно понимаю это, они выдают более полезный TimeoutException, который, как и Джон Скит, я бы предположил (и предпочел бы ) быть поведением веб-службы.
Обратите внимание, что тайм-аут предназначен только для синхронных вызовов (по крайней мере, в веб-службе; я думаю, что это верно и для ссылки на службу WCF). Если вы хотите, чтобы время ожидания асинхронного вызова истекло, вам придется установить таймер и прервать вызов вручную, например, продемонстрированный здесь.
@John Saunders: Вопрос был в том, "Что происходит, когда истекает время ожидания WebClientProtocol?" Ответ: «Выдает исключение WebException». Как это не отвечает на вопрос? И да, я посмотрел на свойство InnerException, надеясь найти там исключение TimeoutException. К сожалению, он был нулевым. Это было частью того, почему только текст сообщения отличал исключение от других возможных WebExceptions. Это неприятно, когда свойство, предназначенное только для потребления людьми, необходимо использовать для принятия программных решений.
На самом деле это не отвечает на вопрос. Кроме того, вы смотрели свойство
InnerException?