我在我的应用程序中使用IdHTTP.Post将数据上传到云中的服务器。云中的DLL将数据保存到SQL Server数据库,并将简单消息返回给应用程序。
上传的数据只是在循环中上传的一串长字符串(这里不会说明原因)。循环中的每个字符串几乎总是相同的长度。
例如:
For I:=1 to 10 do
begin
...
Reply:=IdHTTP.Post(URL,String);
...
end;
这种方法在98%的时间内完美运行。有时,当循环超过100时,“回复”将为空白。如果我再试一次,那就行了。
我尝试了各种各样的东西,其中之一是添加
Sleep(2000);
在循环的每次迭代之后,这似乎也成功了!
因此,简而言之,我的上传似乎偶尔会把自己捆绑成一个结,当上传是大尺寸的时候。任何关于如何比'睡眠'更好地处理这个问题的建议将不胜感激。
我没有对默认设置中的IdHTTP组件进行任何更改,除了:
IdHTTP.ConnectTimeout:=5000;
IdHTTP.ReadTimeout :=5000;
我正在使用Delphi 2010。
请注意,每次迭代的字符串长度都相同,无论是循环10次还是100次。所以字符串长度本身似乎不是问题。
更新
所以忽略了我认为上面发生的大部分内容。 @Remy Lebeau正确地确定问题是答复没有被正确解码,这是因为IdHTTPOptions。[hoForceEncodeParams]设置为false。
之前的问题概述了原因:
Delphi TIdHTTP POST does not encode plus sign
@Remy,我在Indy的版本,正如你在旧问题中指出的那样,并且在回答这个问题时,肯定已经过时了。我对安装更高版本有点犹豫,因为安装说明看起来有点吓人,所以我选择手动编码而不是在此期间。这看起来已经适得其反,所以现在肯定会看一下。
至少现在我知道是什么导致了我的问题。
我有一些跟进的问题,您可以帮助我: