在执行过于频繁的请求时THTTPRIO,SOAP和错误503

时间:2011-11-25 18:13:30

标签: delphi soap wsdl

我正在尝试访问有怪癖的网络服务。看来如果你做了太多的请求(我估计每秒超过一两次),你最终会得到一个错误503.如果你在几秒后重试,那么一切都很好。

现在,我的问题是我正在使用Delphi来使用这项服务。生成的文件将通信部分抽象掉了 - 所以我试图为这个节流问题找到一个简洁的解决方案。现在我在电话之间诉诸sleep() ......

以前有人有过类似的问题吗?是否存在全局挂钩或设置以在成功请求后添加一些冷却期?

4 个答案:

答案 0 :(得分:2)

根据定义:http状态代码503:服务不可用。服务器当前不可用(因为它过载或停机以进行维护)。一般来说,这是一个临时状态。

500-599在Web服务或Web站点上出现服务器端错误,一直发生。对于503,减慢来自客户端程序的请求的频率是一个很好的方法,如果您的客户端程序具有GUI>

,您可能还需要考虑UI设计。

答案 1 :(得分:1)

计时器怎么样?这样你的app就不会被sleep()调用锁定。

答案 2 :(得分:1)

要处理像503这样的暂时性错误,消息处理队列可能会使用递增延迟时间,失败的请求会增加等待时间(最多达到定义的最大值)。如果请求成功,则重置延迟。

所以我会以500毫秒的间隔开始。每次请求失败时,间隔将乘以2,最大延迟为16秒。如果请求无错误地返回,则将间隔重置为其初始值500毫秒。

答案 3 :(得分:0)

我正在回答我自己的问题。我不会接受它,因为这只是在概念阶段。

我想我会为属于我的提供商的服务的所有调用创建一个公共堆栈。每次拨打电话时,我都会使用某种形式的线程或计时器设置一个“冷静”时期(我很想以此为借口包含gabrOmniThread我的应用程序中的库。)因此,如果在冷却期间提交了两个或更多请求,我可以链接它们并向用户显示一些奇特的(*)用户界面以避免事件破坏。

如果有人有更好的选择,我会全力以赴。

(*):当然是带进度条的对话框。