Delphi THTTPRIO 控制元件呼叫webservice超時問題
阿新 • • 發佈:2019-01-03
單位軟體在Win7下呼叫DLL連線webservice時出現超時問題,分析發現win7下30秒如果Webservice伺服器未返回結果則超時,在winxp下沒有問題(但是 時間已經達到了50秒才返回資料)。該DLL是Delphi編寫呼叫了THTTPRIO。
開始不知道問題在哪裡,以為是win7的問題,查詢原因未果。後來用VS寫了個程式呼叫webservice在win7下沒有問題。隨懷疑是THTTPRIO的問題
方法一: 設定THTTPRIO三個屬性
RIO.HTTPWebNode.ConnectTimeout:=600000; //10分鐘
RIO.HTTPWebNode.SendTimeout:=600000;
RIO.HTTPWebNode.ReceiveTimeout:=600000; //其實只需要設定ReceiveTimeout 即可。
注:網上反映在某些版本的delphi下無效。
方法二:修改原始碼
1.修改SOAPHTTPTrans.pas檔案。2.找到procedure THTTPReqResp.Connect(Value: Boolean);
3.寫義變數: Timeout:DWORD;
4.找到 FInetRoot := InternetOpen(PChar(FAgent), AccessType, PChar(FProxy), PChar(FProxyByPass), 0);
在該程式碼前新增如下程式碼:
Timeout:=600000;InternetSetOption(nil, INTERNET_OPTION_RECEIVE_TIMEOUT ,