前面我们一直都讲了如何使用kbmmw smarthttpservice 给客户端提供REST 服务。主要都是返回给
浏览器访问的,如果我们使用delphi 开发桌面应用,如何使用这些服务呢?其实一切都不是问题,kbmmw 除了
有强大的smartservice,也有强大的smartclient 。
我们今天就在以前的smarthttpservice 加上TCP 访问功能,最大的好处就是根本都用动原来的服务代码。
首先我们在服务端,放一个kbmMWTCPServerTransport1。并设置其server 属性。(要使用kbmMWTCPServerTransport,
记住在inc文件里面加上 {$DEFINE KBMMW_NATIVETRANSPORT_SUPPORT})
然后检查一下我们前面设置的服务函数
[kbmMW_Rest('method:$(service.xalionrest.helloworld.method=post), path:$(service.xalionrest.helloworld.path=helloworld)')] // [kbmMW_Method] 注释了这个客户端就不能访问了 function HelloWorld:string; [kbmMW_Rest('method:get, path:version')] [kbmMW_Method] function version:string; [kbmMW_Method('EchoString')] // 回应输入的串 [kbmMW_Rest('method:get, path: ["echostring/{AString}","myechostring/{AString}" ]')] [kbmMW_Auth('role:[SomeRole,SomeOtherRole], grant:true')] function EchoString([kbmMW_Rest('value: "{AString}"')] const AString:string):string; [kbmMW_Method] [kbmMW_Rest('method:get, path: "cal/addnumbers"')] function AddNumbers([kbmMW_Rest('value: "$arg1", required: true')] const AValue1:integer; [kbmMW_Rest('value: "$arg2", required: true')] const AValue2:integer; [kbmMW_Arg(mwatRemoteLocation)] const ARemoteLocation:string):string;
注意 加了[kbmMW_Method] 这个属性,客户端就可以访问。
加了[kbmMW_Rest('method:get, path:version')] 保证使用REST 方式访问。
服务器端就好了,运行就可以了。
现在我们来做客户端,这个更简单
放上对应的控件,如图:
记住要加上单元 kbmMWSmartClient,kbmMWSmartClient,
procedure TForm1.Button1Click(Sender: TObject); var c:IkbmMWSmartClient; s:string; begin Transport.Host:=eIP.Text; // 通过给定的transport来建立一个客户端 c:=TkbmMWSmartRemoteClientFactory.GetClient(Transport,'XALIONREST'); //调用服务器端的服务 s:=c.Service.EchoString('abc'); memo1.Lines.Add('EchoString(''abc'')='+ s ); s:=c.Service.version; memo1.Lines.Add('version='+ s ); s:=c.Service.AddNumbers(34,7); memo1.Lines.Add('AddNumbers(34,7)='+ s ); end;
运行结果
全部正确。
这样我们就实现了kbmmw 服务器的 REST+TCP 双引擎。
再过几个小时2018年就过去了,在此我祝大家2019年元旦快乐,万事如意!