RO40 –
支持
XML-RPC
RemObjects SDK
的一个大特性就是可以添加新的消息和传输类型
(
在
RO01
文档中查看更多关于
RemObjects SDK
的架构信息
).
这使得可以轻松的添加支持
XML-RPC
的新消息类型
.
XML-RPC
是基于
XML
的远程过程调用规范
,
如同
SOAP,
虽然尽量简单实现
,
还是支持一下复杂数据结构
.
由于简单易用
,
所以已经用很多编程语言实现
,
包括
C, Perl, PHP, Java, Javascript , Python, Delphi
和
.NET (RemObjects SDK
支持最后两者
).
XML-RPC
通常使用
HTTP
所以对防火墙是友好的
.
当调用支持
XML-RPC
接口的服务时
,
将生成一个
XML
文档
. XML-RPC
请求内容如下
:
<
methodCall
>
<
methodName
>
samples.sum
</
methodName
>
<
params
>
<
param
><
value
><
int
>
5
</
int
></
value
></
param
>
<
param
><
value
><
int
>
3
</
int
></
value
></
param
>
</
params
>
</
methodCall
>
这是一个包含方法名称和参数的简单
XML
文档
,
本例中含有两个整数
,5
和
3.
远程服务将读取这个请求
,
并作处理
(
例如将两个值相加
)
然后生成一个包含运行结果的响应
XML
文档
.
响应如下
:
<
methodResponse
>
<
params
>
<
param
><
value
><
int
>
8
</
int
></
value
></
param
>
</
params
>
</
methodResponse
>
支持下面的类型
:
- integer
- Boolean
- string
- double
- date/time (iso8601格式)
- base64 编码的流
- 包含简单类型,数组或结构的一维数组
- 包含名称/值对的结构体.其中值可以是数组,简单类型或结构体
而且
,
当处理请求时发生错误方法也可以返回异常
.
RemObjects SDK
将这些类型封装为适当的
XML-RPC
类型
;
或作为字符串传递
. SDK
实现的
XML-RPC
可以用于写
XML-RPC
客户端也可以写
XML-RPC
服务端
.
通常当客户端或服务端不想使用冗长的
SOAP
技术时才使用
XML-RPC
做简单的远程调用
,
但是还是使用标准的通讯方式
.
支持对
PHP
客户端的代码生成
- new in 'Vinci'
我们的
XML-RPC
包含
Service Builder
代码生成插件
,
可以生成用于
PHP
的
.inc
文件
.
由于
XML-RPC
不像
WSDL
的
SOAP
服务一样有元数据
,
所以必须提供
XML-RPC
的服务声明
.
如果人工做
,
每个方法的
xmlrpcmsg
和每个参数的
xmlrpcval
都需要手动添加
,
非常容易出错
.
Service Builder
插件可以使其基于
PHP XML-RPC
库
(http://phpxmlrpc.sourceforge.net/)
生成包含服务
,
类型
,
方法的
PHP
类
.
在
Service Builder
中打开包含服务的
RODL
文件
,
点击主菜单的
CodeGen | PHP | Xml Rpc Interface
项
.
将生成可以用
require
or include
命令
包含在
PHP
页面中的简单的
.inc
文件
.
在
PHP
页面中你可以轻松的调用服务
:
require
("SampleLibrary_intf.inc");
$service = new NewService('http://localhost:8099/xmlrpc');
echo
"Passing 15, 12 to the remote XML-RPC server. Result: ";
echo
$service->Sum(15, 12);
调用非
RemObjects SDK
的
XML-RPC
服务
XML-RPC
没有向
RODL
或
WSDL
格式的元数据
,
所以使用没有用
RemObjects SDK
实现的
xml-rpc
服务
,
你需要手动在
Service Builder
中重建方法定义
,
然后使用
CodeGen
菜单生成相关语言
(Delphi, .NET
或
PHP)
的接口
.