1. 程式人生 > >Delphi THTTPRIO 控制元件呼叫webservice超時問題

Delphi THTTPRIO 控制元件呼叫webservice超時問題

單位軟體在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 ,
  @Timeout, sizeof(Timeout));