今天嘗試用uniGUI做Web服務器,調用應用服務器的WebService,遇到些問題記錄下來備忘。
1、對WebService的調用同一般App程序,只是注意如果WebService的執行時間較長,會報超時錯誤,此時需要處理:
(1)在DataModule上放一個THTTPRIO控件;
(2)在數據模板創建時,設置THTTPRIO控件的HTTPWebNode屬性的超時時間,代碼如下:
procedure TUniMainModule.UniGUIMainModuleCreate(Sender: TObject); begin //連接超時時間(ms) HTTPRIO1.HTTPWebNode.ConnectTimeout := 30000; //接收超時時間(ms) HTTPRIO1.HTTPWebNode.ReceiveTimeout := 30000; //發送超時時間(ms) HTTPRIO1.HTTPWebNode.SendTimeout := 30000; end;
(3)調用WebService方法時,不使用缺省創建的THTTPRIO,而是數據模板上的控件,代碼如下:
function TUniMainModule.GetString: string; var iw : IWebServiceTest; begin //創建WebService接口 iw := GetIWebServiceTest( False, '', HTTPRIO1);//窗體上的控件 //調用方法 Result := iw.SIService(''); end;
2、uniGUI服務器運行時,調用WebService報“MSXML未安裝”的錯誤,開始以為是64位和32位的問題,后來發現不是。正確理解是:Delphi內部WebService調用時使用了MSXML,而MSXML是COM對象,所以需要在程序啟動時調用CoInitialize進行初始化,在uniGUI服務器中只需要設置服務數據模板的AutoCoInitilaize屬性為True即可,代碼如下:
ServerModule.AutoCoInitilaize :=True;
當然最好是在設計期直接更改屬性即可。
