RemObjects SDK是一个先进的远程框架,允许你通过网络远程地访问驻留在服务器上的对象。RemObjects SDK允许你开发客户/服务应用程序,利用高优化性能的Smart Services或跨平台兼容性的标准Web Services,使客户端和服务器端轻松高效的通讯。
一、简单的计算器示例程序
在安装完RO后(以6.0.57.993为例),首先请开启New Items对话框(File —> New —> Other),切换到RemObjects SDK选项(如图1所示),其内的项目可以帮助我们快速的产生骨架程序:
图1
这里选择VCL Standalone(基于VCL的独立服务器程序),按下OK按钮,进入向导界面,如下图(图2)所示:
图2
点击图2中的【Advanced Project Options...】按钮进入高级选项设置,如图3所示:
图3
下表是这个窗口的字段说明:
字段 | 说明 |
---|---|
Project Name | 项目名称 |
Service Library Name | Library的名称 |
Service Nam | Service的名称 |
Server Class | 通讯协议,见Server类组件 |
Message Class | 讯息协议,见Client类组件 |
Project Folder | 项目的存放路径 |
输入必要的信息后按下OK按钮就完成了骨架程序的建立工作了,这个程序已经包含所有必须用到的组件,接下来只需要启动Delphi IDE主菜单上的RemObjects SDK—>Edit Service Library(图4)工具定义服务器的方法即可完成Server端的程序:
图4
RO 默认会帮使用者产生两个方法,一个是Sum、另一个是GetServerTime(不要都不行,如图5所示)。
图5
为求简单,这里直接运用这两个方法,不做任何的变动。请将RemObjects Service Builder关闭后编译这个项目,此时RO 会跳出一个对话窗框(如图6所示)询问是否产生Service的定义与实现,请选择是,并且在编译完成后切换到CalcService_Impl.pas加入这两个方法的实现代码:
图6
{ CalculatorService }
function TCalculatorService.Sum(const A: Integer; const B: Integer): Integer;
begin
Result := A + B;
end;
function TCalculatorService.GetServerTime: DateTime;
begin
Result := Now;
end;
最后将TROIndyHTTPServer(他被命名为ROServer)的Active设为Ture就完成了Server端的程序了。
在编写Client端程序之前必须先将Server程序执行起来,因为Client端必须由Server取得WSDL,接着请建立一个新的项目,并且在其Form上放入TROWinInetHTTPChannel、TROSOAPMessage两个组件,然后启动位于主菜单上的RemObjects SDK->Import SOAP Web Service来载入服务(图7):
图7
8099是TROIndyHTTPChannel默认的Port,如果不喜欢可更改其Port地址。按下Import后会开出Service Builder,其中点击默认的New Library可以修改名称,这个名称将是程序中的单元文件的名称,如图8所示。其中可以看到CalculatorService的定义,如图9所示。
图8
图9
最后加上一些控件在FORM上,这里需要指出的是,必须设置ROWinInetHTTPChannel的TargetURL属性为:http://localhost:8099/soap,然后加上调用Web Services 的程序代码就完成了Client端程序了,下图是界面(图10):
图10
接着是调用Web Services的程序代码:
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, uROClient, uROSOAPMessage, uROBaseHTTPClient, uROWinInetHttpChannel;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
Edit4: TEdit;
ROWinInetHTTPChannel1: TROWinInetHTTPChannel;
ROSOAPMessage1: TROSOAPMessage;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
CalcLibrary_Intf;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
calcSer: ICalculatorService;
begin
calcSer := CoCalculatorService.Create(ROSOAPMessage1, ROWinInetHTTPChannel1);
try
Edit3.Text := IntToStr(calcSer.Sum(StrToIntDef(Edit1.Text, 0), StrToIntDef(Edit2.Text, 0)));
finally
calcSer := nil;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
calcSer: ICalculatorService;
begin
calcSer := CoCalculatorService.Create(ROSOAPMessage1, ROWinInetHTTPChannel1);
try
Edit4.Text := DateTimeToStr(calcSer.GetServerTime);
finally
calcSer := nil;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := EmptyStr;
Edit2.Text := EmptyStr;
Edit3.Text := EmptyStr;
Edit4.Text := EmptyStr;
end;
end.
下图是这个程序的执行画面(图11):
图11
很简单是吧。程序代码量很少,绝大部分关键程序都由RO完成!示例程序下载地址:http://download.csdn.net/detail/js0001/4236722。