THTTPRIO, SOAP и ошибка 503 при выполнении слишком частых запросов - PullRequest
2 голосов
/ 25 ноября 2011

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

Теперь моя проблема в том, что я использую Delphi для использования этого сервиса. Сгенерированные файлы отделены от коммуникационной части, поэтому я пытаюсь найти правильное решение этой проблемы с газом. Прямо сейчас я прибегаю к sleep() между вызовами ...

У кого-нибудь была подобная проблема раньше? Есть ли глобальная перехват или настройка, чтобы добавить некоторый период охлаждения после успешного запроса?

Ответы [ 4 ]

2 голосов
/ 26 ноября 2011

По определению: http код состояния 503: Сервис недоступен.Сервер в настоящее время недоступен (потому что он перегружен или отключен для обслуживания).Как правило, это временное состояние.

Поскольку 500-599 представляют ошибку на стороне сервера, которая постоянно происходит на веб-службе или веб-сайте.Для 503 замедление частоты запросов от вашей клиентской программы является хорошим способом, и вам может потребоваться рассмотреть дизайн пользовательского интерфейса, если ваша клиентская программа имеет графический интерфейс>

1 голос
/ 26 ноября 2011

Для обработки временной ошибки, такой как 503, очередь обработки сообщений может использовать увеличивающееся время задержки, а неудавшийся запрос увеличит время ожидания (до определенного максимума).Если запрос был успешным, задержка сбрасывается.

Так, например, я бы начал с интервала 500 мсек.Каждый раз, когда запрос не выполняется, интервал умножается на два с максимальной задержкой в ​​16 секунд.Если запрос возвращается без ошибки, интервал сбрасывается до первоначального значения 500 мсек.

1 голос
/ 25 ноября 2011

Как насчет TTimer? Таким образом, ваше приложение не будет заблокировано вызовом sleep ().

0 голосов
/ 29 ноября 2011

Я отвечаю на свой вопрос. Я пока не приму это, потому что это только на стадии концепции.

Думаю, я создам общий стек для всех вызовов служб, принадлежащих моему провайдеру. Каждый раз, когда выполняется звонок, я устанавливаю период «охлаждения», используя какую-то форму потока или таймера (я испытываю желание использовать это в качестве предлога для включения gabr 's Библиотека OmniThread в моем приложении.) Поэтому, если два или более запроса будут отправлены в период охлаждения, я могу связать их в цепочку и показать пользователю какой-нибудь необычный (*) пользовательский интерфейс, чтобы избежать прерывания события.

Если у кого-то есть лучшая альтернатива, я весь в ушах.

(*): Конечно, диалоговое окно с индикатором выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...