毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 开发语言 >> 正文

delphi调用webservice的超时处理(HTTPWebNode timeout)

更新时间:2012-11-18:  来源:毕业论文

delphi调用webservice的超时处理(HTTPWebNode timeout)
在用delphi7实现远程调用webservice时,碰到超时处理的问题,我的设置如下:

Delphi/Pascal code
?12345     var RIO: THTTPRIO;     rio.HTTPWebNode.SendTimeout :=3000;     rio.HTTPWebNode.ConnectTimeout := 3000;     rio.HTTPWebNode.ReceiveTimeout := 6000;

可是以上设置并没有起到作用,在第一次远程连接时,还是会出现失败(3秒,测试的webservice构建在我本地,webservice方法中使用thread.sleep(XX)模拟返回延迟);当我把timeout都设置的很小时,竟然也会有成功调用的情况.
希望大家给些想法或建议.
还发现个问题,设置超时时间后,会报错"ESOAPHTTPException with message '试图引用不存在的令牌' URL:.......... SOAPAction:.......",由于添加了try .. except,之前并未留意.这外异常总是在第一次调用webservice时出现,之后就不再报错.
这应该是delphi调用webservice设置超时时间的BUG,google到的'http://shenoyatwork.blogspot.com/2006/11/setting-timeouts-in-delphi-soap.html'(翻墙),里面主要内容如下:

Delphi/Pascal code
?1234567891011121314151617 {The way for you to do this is: 1) Do not set the ReceiveTimeout or the ConnectTimeout or other timeout properties of HTTPRio.HTTPWebNode.   2) Handle HTTPRio.HttpWebNode.BeforePost event and do this: }  procedure TForm2.HTTPRIO1HTTPWebNode1BeforePost( const HTTPReqResp: THTTPReqResp; Data: Pointer); var TimeOut : integer; begin TimeOut := 2000; // in milleseconds.  InternetSetOption(Data,       INTERNET_OPTION_RECEIVE_TIMEOUT,       Pointer(@TimeOut),       SizeOf(TimeOut)); end;

我比较迷茫的是"Handle HTTPRio.HttpWebNode.BeforePost event"的code,如何添加,"HTTPRIO1HTTPWebNode1BeforePost"这个函数名应该不是随便写的吧,不然delphi如何自动用此函数处理"HTTPRio.HttpWebNode.BeforePost event"呢?

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。