RO08 – 智能化我们的第一个服务
本文档将向你展示如何将我们的第一个服务转换成为
Smart Service.
一点介绍
在
article RO05
和
RO06
我们在服务端创建了两个简单的方法
(Sum
和
GetServerTime)
并在客户端调用它们
.
为了我们能在
Internet
和局域网的任意位置都能访问我们使用了
RemObject SDK
二进制编码和
HTTP
协议
.
当它运行正常时,我们可能要面对这样的问题:如何让非
RemObjects
客户端使用我们的服务呢
?
如果我们的客户端是
.Net
应用程序
(
运行
X386
的
Poctet PC
或
Mono
的一部分
)
可以用
.Net
客户端
SDK
连接我们的服务
.
但是如果要用
Java
或
PHP
应用程序来连接我们的服务就有问题了,因为还没有
RO
客户端支持这些语言
.
解决这种协同问题要使用标准编码格式
SOAP
(Simple Object Access Protocol).
现在每个可用的主要平台都支持使用
SOAP
消息协议连接远程服务
.
现在我们可以使服务同时提供二进制和
SOAP
两种连接方式
.
设置SOAP 消息
为了在我们服务中添加
SOAP
连接
,
我们需要做如下几个简单的步骤
.
1.
打开服务项目在主窗体中拖放一个
TROSOAPMessage
控件
.
2.
在属性面板中双击
ROServer
控件的
Dispathers
属性
.
打开
Dispatchers
列表编辑器
.
3.
点击
”Add”
按钮并从
ComboBox
中选择
"ROSOAPMessage1".
如图
.
如何使客户端使用两种消息类型
RemObjects
客户端可以使用二进制或
SOAP
消息连接服务端
.
为了让我们的客户端使用
SOAP
连接到服务端
,
我们需要在原来的代码中作少许修改
.
1.
打开客户端项目并在主窗体上拖放两个
TRadioButton
控件
.
2.
修改第一个
Radio Button
的
Caption
为
"Use SOAP Messaging" ,
另一个为
"Use Binary Messaging".
3.
设置第一个
RadioButton
的
Checked
属性为
Ture.
4.
从
"RemObjects SDK"
控件面板中拖放一个
TROSOAPMessage
控件,添加到主窗体
.
你的客户端程序如下图
:
现在替换原来的代码
:
myservice := CoTestService.Create(ROBINMessage1, ROWinInetHTTPChannel1);
为
:
if
RadioButton1.Checked then begin
{ SOAP }
myservice := CoTestService.Create(ROSOAPMessage1, ROWinInetHTTPChannel1);
ROWinInetHTTPChannel1.TargetURL :=
'http://localhost:8099/SOAP'
;
end
else begin
{ Binary }
myservice := CoTestService.Create(ROBINMessage1, ROWinInetHTTPChannel1);
ROWinInetHTTPChannel1.TargetURL :=
'http://localhost:8099/BIN'
;
end
;
完成
.
你简单的设置服务代理使用不同的
URL
和消息格式与服务端通讯
.
调用
Sum
和
GetServer
方法的代码不变
.
总结
现在你的应用服务可以通过
SOAP
被任何平台上的客户端调用了
.
你可以在
JBuilder,VisualStudio.Net
或
http://www.pocketsoap.com
的客户端中导入
IE
中显示的
WSDL.
创建
Smart Service
的最大好处就是满足了两方面要求
:
服务可以提供最优的连接
,
也可以使用
SOAP.
这种组和可以充分发挥我们的经验又能兼顾商业潜能
,
而我们却不用写多少代码及可以实现
.
最后我们发现我们无论使用何种连接方式都统一使用一种编码方式去调用服务
.