Delphi THTTPRIO、SOAP和执行过频繁请求时的错误503

Delphi THTTPRIO、SOAP和执行过频繁请求时的错误503,delphi,soap,wsdl,Delphi,Soap,Wsdl,我正在尝试访问一个有怪癖的web服务。看起来,如果你做了太多的请求(我猜每秒超过一到两个),你最终会得到一个错误503。如果几秒钟后重试,则一切正常 现在,我的问题是我正在使用Delphi来使用这个服务。生成的文件将通信部分抽象掉了,所以我正试图为这个节流问题想出一个简洁的解决方案。现在我在调用之间求助于sleep() 以前有人有过类似的问题吗?是否有一个全局挂钩或设置来在成功请求后添加一些冷却时间?TTimer如何?这样,您的应用程序就不会被sleep()调用锁定。根据定义:http状态代码5

我正在尝试访问一个有怪癖的web服务。看起来,如果你做了太多的请求(我猜每秒超过一到两个),你最终会得到一个错误503。如果几秒钟后重试,则一切正常

现在,我的问题是我正在使用Delphi来使用这个服务。生成的文件将通信部分抽象掉了,所以我正试图为这个节流问题想出一个简洁的解决方案。现在我在调用之间求助于
sleep()


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

TTimer如何?这样,您的应用程序就不会被sleep()调用锁定。

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


As 500-599在Web服务或Web站点上始终显示服务器端错误。对于503,从客户端程序中减慢请求的频率是一个很好的方法,你可能需要考虑UI设计,如果你的客户端程序有GUI>/P>< P>处理503的一个临时错误,消息处理队列可以使用一个递增的延迟时间,一个失败的请求会增加等待时间。(达到定义的最大值)。如果请求成功,延迟将重置


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

我在回答我自己的问题。我不会接受它,因为这只是概念上的问题年龄

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

如果有人有更好的选择,我洗耳恭听


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

这可能是WinInet的问题吗?我注意到WinInet存在一些奇怪的问题。您安装了什么版本的Internet Explorer,以及什么操作系统?您在Internet Explorer选项页中配置了代理吗?您正在进行什么身份验证(Http/https/basic/digest/etc)可能是服务器有一些内部问题?您正在运行来自不同线程的多个请求吗?503可能是由于流量太大,或者谁知道服务器端发生了什么…更多信息会有所帮助。服务不在我的控制范围内(这是电子发票,服务器来自税务局。)我猜这肯定是某种形式的限制,以避免太多的请求。我已经使用SoapUI重现了这个问题,所以我认为这不是WinInet的问题。好吧,我不太担心实际使用的机制,但我想以一种干净的方式来做。我更担心的是在代码中撒上停止符号……是的,这就是我想要的我正在尝试这样做。我必须使用多个web服务,而且我无法预测工作负载,因此我希望有一个很好的集中方式来限制我的输出。我甚至想到了一个事件队列……有趣的是,这就是我所拥有的(我等待
NumTries*WaitInterval