随着delphi XE4 的推出,开始真正意义上支持ios 的开发,由于目前kbmmw 还不完全支持ios 的开发,因此
无法直接使用kbmmw 的客户端访问kbmmw 的服务器(虽然kbmmw 也提供了C 的客户端,可以使用xcode连接
kbmmw的C 客户端来访问kbmmw 服务器,但是功能有限,而且要熟悉xcode),对于急着想在ios 使用kbmmw
服务的同学,可以先使用kbmmw 的webservice 方式访问kbmmw 服务器。
下面我就介绍以下如何在ios 访问kbmmw 服务器
还是我们的上面的服务端程序,需要修改几个地方:
TkbmMWTCPIPIndyServerTransport 的端口设成http 的标准接口80,
streamFormat 设成 SOAP
verifyTransfer 设成 False ,以便兼容不同语言的客户端。
另外 需要在Params 里面加一句:
KBMMWSOAPVIAHTTP=1
服务器端的其他不用动,按原来的方式注册服务:
procedure TForm1.FormCreate(Sender: TObject); var sd:TkbmMWCustomServiceDefinition; begin sd:=kbmMWServer1.RegisterService(Txalionsrv,false); end;
编译运行,ok. 服务器端就完成了。
客户端由于不能使用kbmmw, 只能使用标准的delphi 功能。
先建立一个标准的ios 空白文件。
放置一个label,一个memo,一个按钮。
然后我们要导入WSDL.
kbmmw 提供了WSDL 文件,文件名为kbmMW.wsdl.在kbmmw 源码的目录。
我们在WSDL 导入器里面选择这个文件,如图:
一路点下去,直到完成。就会生产一个kbmmw.pas.
把这个kbmmw 加入到uses 里面。
然后在button 点击事件里面写入代码
var server:IProcessRequestSOAPPort; req:ProcessRequest; res:TkbmMWSOAPResponse; v:variant; begin server:=GetIProcessRequestSOAPPort(false, 'http://127.0.0.1/server1',nil); req:=ProcessRequest.Create; try // Setup request. req.ServiceName:='XALION_SRV'; req.ServiceVersion:=''; req.StateID:=-1; req.Func:='sumall'; v:=VarArrayCreate([0,1],varVariant); v[0]:=100; req.Args:=v; // Call app server. res:=server.ProcessRequest(req); try // Check response. Label1.Text:=res.StatusText; if res.StatusCode=0 then // OK begin Memo1.Lines.Add(res.Result); end; finally res.Free; end; finally req.Free; end; end;
然后编译ios 程序,真机运行效果如下。
好了。