今天尝试用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;
当然最好是在设计期直接更改属性即可。