随着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 程序,真机运行效果如下。

好了。