RO07 - Smart Services

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