Я звоню во внешнюю службу, используя веб-ссылку. IP-адреса являются динамическими, поэтому я называю их один за другим, и все работает нормально. Периодически некоторые из IP-адресов недоступны, и я получаю таймаут, который я обрабатываю. Проблема заключается в длительности времени, затрачиваемого на тайм-аут, составляет около 30 секунд для каждого вызова. Я попытался изменить свойство тайм-аута на ws до 5 секунд, но это, похоже, не имеет значения. Может кто-нибудь, пожалуйста, помогите мне с этим?C# Web Reference Call Timeout
ответ
Вы говорите, что вы изменили «свойство таймаута на ws до 5 секунд». Если вы изменяете время ожидания на сервере, то это не поможет вам, когда ваш клиент не сможет подключиться.
Вы используете «веб-ссылку», поэтому я предполагаю, что у вас есть класс клиента, полученный из System.Web.Services.Protocols.SoapHttpClientProtocol
. Этот класс происходит от System.Web.Services.Protocols.WebClientProtocol
, который имеет свойство Timeout. Попытайтесь изменить это свойство на своем клиенте перед тем, как сделать звонок, и посмотреть, есть ли у вас лучшие результаты.
Вот ответ, который я искал: Adjusting HttpWebRequest Connection Timeout in C#
**** Внимание: **** Snippet
Из документации MSDN по HttpWebRequest.Timeout
собственности:
A Запрос доменной системы (DNS) может занимать до секунд до возврата или времени . Если ваш запрос содержит имя хоста, для которого требуется разрешение, и вы установите Timeout на значение менее 15 секунд, это может занять 15 секунд или более до того, как будет отправлено WebException, чтобы указать время ожидания вашего запроса.
Это может помочь, если вы свистеть IP-адрес до создания прокси-объекта и вызова веб-службы здесь подробности о классе Ping http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx
Вы можете выполнить поиск DNS самостоятельно с более коротким тайм-аута (например, 1000 мс):
А затем (если IP-адрес был найден) выполнить вызов веб-службы с помощью IP-адреса (чтобы избежать поиска в DNS, где вы не можете контролировать время ожидания) с помощью таймаут, например, 4000 мс (или даже лучше: 5000 мс - (время поиска DNS)), чтобы достичь полного тайм-аута в 5000 мс.
- 1. C++ Void Call Timeout
- 2. Call Web Reference с использованием страницы ASPX
- 3. C# Web API call
- 4. C# Web Reference и PHP
- 5. метод dispatch_async timeout call
- 6. C++ Array call-by-reference с шаблоном
- 7. Call-by-reference и Call-by-value
- 8. C# Web Reference - ошибка с динамическим URL
- 9. Web API Async Timeout
- 10. Jetty Web Socket Timeout
- 11. jQuery ajax call set timeout
- 12. PHP Call Time Pass Reference
- 13. Драйвер Call Web Service
- 14. Visual Studio Web Reference rrrors
- 15. VirtueMart API Connection/web Reference
- 16. Call-By-Value vs Call-By-Reference revisited
- 17. TimeOut Linq Alter Web Config
- 18. . Net Web Reference Ошибка SSL
- 19. Web Workers и Reference Error
- 20. ajax call - web services
- 21. C++ 11 rvalue reference call copy constructor тоже
- 22. malloc inside function/call-by-reference/valgrind
- 23. Разница между Call-By-Name и Call-By-Reference
- 24. Timeout with bind, call & apply methods
- 25. JQuery ajax call default timeout value
- 26. java private members call by reference
- 27. Boost hana fold_left lamba call by reference
- 28. php call time pass by reference
- 29. различия в поведении между «Service Reference» и «Web Reference»
- 30. Ajax Call To Web API
Не могли бы вы высказать некоторый код того, как вы звоните в службу и как вы устанавливаете таймаут? – taylonr
// Глобальное свойство private WebService.Service1 _ws = new WebService.Service1(); // В конструкторе _ws.Timeout = 5000; // Вызов метода return _ws.create_session (string.Concat (_Domain, @ "\", _UserName), _Password, out lErrorCode); – Jim
Если по этой проблеме больше информации, я бы рекомендовал провести тщательную отладку. Пройдите код и убедитесь, что это вызов веб-службы, а не что-то еще, что занимает так много времени. Если это так, то пока вы переходите через код, проверьте, какое значение свойства Timeout находится в момент выполнения вызова. Возможно, вы установили Timeout на 5000 раньше, но, возможно, что-то другое установили иначе. –