RO07 - Smart Services
当它在
2003
年被发布时,
RemObjects SDK
介绍了
Smart Services
的概念,思想是组合高效率,私有的开放标准系统通信方法,使服务可供很多客户端无损效率的使用
.
有时你希望你的服务可以向第三方开放,或者给任何人或者购买服务接口的客户
.
这种情况下
,
除非所有的客户都使用
RemObjects SDK(
或者他支持的语言
,
平台
,
操作系统
)
否则不可能实现
.
所以服务应使用开放标志协议如
SOAP web Services
或
Simpler XML-RPC.
其通讯协议效率低
(
占用高带宽
,
数据解析效率地下
,
基于文本的
XML
消息等
),
但是事实上
,
他的跨平台优点可以抵消这些缺点
.
同时你还要在这个服务器上运行你自己的使用
RemObjects SDK
开发的客户端
,
你当然希望使用
BinMessage
协议保持
RO
的优点
.
保证你的客户端高效率通讯
.
进入
Smart Services
使用
Smart Services
架构
, RemObjects SDK
允许同时使用不同的协议发布同一个服务
.
这样你自己的客户端程序
(
或其他使用
RemObjects SDK
或与
RemObjects
兼容的
.Net
第三方
)
就能在不牺牲开放性的同时保持高效通讯
.
相关消息类型
一个使用
Smart Services
的应用程序一般用
BinMessage
和
SOAP
消息类型开放其服务,也会使用
XML-RPC
和
PostMessage
支持其他属性从而能开放简单的解析消息格式供给非
RO
客户端
,
SOAP Web Services
对很多调用提供支持
,
选择这种方式的每个接收平台实现最大的连接范围
.
在过去的
5
年中
SOAP
已经变为跨平台连接的标准
, RemObjects SDK
对
SOAP
提供良好的支持
.
XML-RPC
不常用
,
他比
SOAP
提供了更易用和更简洁的
XML
消息格式
,
如果平台可以使用
XML-RPC
则他是首选
.
通常
XML-RPC
代码为
PHP
调用而生成的
(
在
Vinci
中已经介绍过了
), XML-RPC
是一个使
PHP
调用可以服务的一个方案
.
SDK
开放可扩展的架构使开发人员可以轻松的定义自己的消息格式
,
并可以轻松的将
其加入到结构中
,
使用时与现有的完全一样
.
这样可以使
Smart Service
通过选择不同的通讯方式支持更多的平台
.
Smart Services,
当然允许同时使用两种以上的消息协议
,
所以它可以同时支持
SOAP,XML-RPC
和
BinMessage.
根据
Smart Service
的服务通道的不同这里有两个选择
:
1)
使用不同的消息类型发布服务
基于
HTTP
的服务可以同时支持多种消息格式
,
连接时用不同的
URL
区分
.
使用服务组件的
Dispatchers
集合属性可以设置多种通讯消息格式,并指定不同的
URL
服务地址
.
例如可以用做如下设置
:
- BinMessage http://yourserver/bin
- SOAP http://yourserver/soap
HTTP
服务将根据连接的
URL
地址自动调整消息请求格式
.
由于
HTTP
是
XML-RPC
和
SOAP
的标准传输协议(
SOAP
允许使用不同的传输通道),一般不使用其他的通道发布
SOAP
和
XML-RPC.
否则非
RO
客户端将无法与之通讯
..
2)
使用不同的服务通道发布你的服务
其他的服务同时不支持多种消息格式,但是
RemObjects SDK
可以同时使用多个服务控件
.
例如
,
你可以使用
Super
通道提供
BinMessage
消息格式
,
另外使用
HTTP
通道提供
BinMessage
和
SOAP
消息格式
,
或者使用
TCP
服务通道开通不同的端口支持
BinMessage
和
XML-RPC.
ServerMultiMessage
控件
- new for 'Vinci'
除了上面两个方面
,RemObjects SDK
还提供了新的
ServerMultiMessage
控件
.
与其他
Message
控件相比
,ServerMultiMessage
控件可以为所有的服务通道的
Dispatcher
属性引用
,
他不提供某种特定的消息格式
, ServerMultiMessage
可以分发任意一种其可处理的消息类型
.
当消息传递到服务器
ServerMultiMessage
使用特定的消息格式接收
,
并使用相应的消息组件解析消息
,
同样的方式对应答信息编码
.
这样就很容易使用一个端口或
URL
发布
Smart Service,
而不用考虑消息类型了
.
显然
, ServerMultiMessage
组件需要从接收的消息前几个字符中确定消息的格式
.
理论上对所有想象中的编码格式这是不可能实现的
,
但是对
RO
常用的
4
中消息类型来说能很好的实现
,
因为每种消息格式前都有唯一的标示类型数据位
.