RO08 – 智能化我们的第一个服务

来源:互联网 发布:黑桐干也 知乎 编辑:程序博客网 时间:2024/05/18 03:54
 
RO08 – 智能化我们的第一个服务
本文档将向你展示如何将我们的第一个服务转换成为Smart Service.
一点介绍
article RO05 RO06 我们在服务端创建了两个简单的方法 (Sum GetServerTime) 并在客户端调用它们.为了我们能在Internet和局域网的任意位置都能访问我们使用了RemObject SDK二进制编码和HTTP协议.
当它运行正常时,我们可能要面对这样的问题:如何让非RemObjects客户端使用我们的服务呢?
如果我们的客户端是.Net应用程序(运行X386Poctet PCMono的一部分)可以用.Net客户端SDK连接我们的服务.
但是如果要用JavaPHP应用程序来连接我们的服务就有问题了,因为还没有RO客户端支持这些语言.
解决这种协同问题要使用标准编码格式SOAP (Simple Object Access Protocol). 现在每个可用的主要平台都支持使用SOAP消息协议连接远程服务.
你可以从这两个网站查看SOAP的详细信息http://www.w3c.org http://www.msdn.microsoft.com/soap.
现在我们可以使服务同时提供二进制和SOAP两种连接方式.
设置SOAP 消息
为了在我们服务中添加SOAP连接,我们需要做如下几个简单的步骤.
1.       打开服务项目在主窗体中拖放一个TROSOAPMessage 控件.
2.       在属性面板中双击ROServer控件的Dispathers属性. 打开Dispatchers列表编辑器.
3.       点击”Add”按钮并从ComboBox中选择"ROSOAPMessage1".
如图.
现在保存项目并按F9运行程序.
OK!
如果我们在IE浏览器中键入地址"http://localhost:8099/SOAP" 将会见到如下WSDL文档:
 
请登陆 http://www.w3.org/TR/wsdl 查看更多WSDL详细说明.
如何使客户端使用两种消息类型
RemObjects客户端可以使用二进制或SOAP消息连接服务端. 为了让我们的客户端使用SOAP连接到服务端,我们需要在原来的代码中作少许修改.
1.       打开客户端项目并在主窗体上拖放两个TRadioButton控件.
2.       修改第一个Radio ButtonCaption"Use SOAP Messaging" ,另一个为 "Use Binary Messaging".
3.       设置第一个RadioButtonChecked属性为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和消息格式与服务端通讯.调用SumGetServer方法的代码不变.
总结
现在你的应用服务可以通过SOAP被任何平台上的客户端调用了.
你可以在JBuilder,VisualStudio.Nethttp://www.pocketsoap.com的客户端中导入IE中显示的WSDL.
创建Smart Service 的最大好处就是满足了两方面要求:服务可以提供最优的连接,也可以使用SOAP.这种组和可以充分发挥我们的经验又能兼顾商业潜能,而我们却不用写多少代码及可以实现.
最后我们发现我们无论使用何种连接方式都统一使用一种编码方式去调用服务.