uniGUI试用笔记(十三)调用WebService

 

今天尝试用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;

当然最好是在设计期直接更改属性即可。

posted @ 2015-05-08 21:25  玻璃城市  阅读(3108)  评论(0编辑  收藏  举报