RO05 - 如何编写RemObjects SDK服务端 (Delphi Version)

RO05 – 如何创建RemObjects SDK 服务(Delphi Version)

本文档向你展示如何使用RemObjects(Delphi)创建第一个服务.读了本文档后你可以继续读相关文档:

                                                                                                       

RO06:如何创建RemObjects客户端(Delphi).

注意:如果你安装了.NET版请看RO45 RO46.

你可以把本文档当作一个范例并牢记创建步骤. 本文相关项目完整代码在文档底部有下载连接.

选择服务类型

第一步主要是选择一个你要创建的服务类型.

  • Delphi IDE中点击File | New | Other 切换到RemObjects SDK标签.

如下图 (随着Delphi,Windows版本不同可能有些出入):

本例我们创建一个简单的"VCL Standalone" 可执行服务.这是最简单的一种服务,不需要任何Web服务和其他配置就可以运行.

  • 选择"VCL Standalone" 点击OK.

选择项目选项

接下来的对话框中输入项目的基础选项如项目名称和项目路径.

关于更多有关Message类型信息请见RO07: Smart Services

 

  • Ctrl-F9 编辑项目.

RemObjects SDK 代码生成器

F9后会弹出一个对话框,选择提供服务的类.

注意:
1)
如果已经安装了Hydra,会看到Hydra Autoupdate Service选项
2)
最后两个选项只有安装了Data Abstract 才会出现.

  • 点击OK继续编译.

完成后,项目将生成一个新单元(如下图),并且屏幕下部的出现一个小窗口(D6)或在消息面板上显示生成代码信息(D7).

在后台,RemObjects预处理程序分析NewLibrary.rodl 文件 (在创建项目的时候生成的). 预处理程序寻找没有实现单元的服务,并为其创建实现单元.

生成了三个文件:

1.     NewLibrary_Invk.pas: 包含所有内部调用代理.在每次编译都重新生成,只用于服务端.

2.     NewLibrary_Intf.pas: 用于服务端和客户端的服务接口. 再次提示,这是根据需要自动生成的文件,在上面所做的修改可能会被覆盖.

3.     NewService_Impl.pas: 包含服务的实现,在此输入我们的逻辑代码.与其它两个文件不同这个文件不自动生成.如果你更新了服务 (例如通过菜单RemObjects SDK | Edit Service Library如下图), 编译后将报缺少方面的错误.将接口的声明函数拷贝到类中并按下Ctrl+Shift+C自动增加实现部分.

  • 选择NewService_Impl.pas 单元完成Sum方法和GetServerTime方法:

function TNewService.Sum(const A: Integer; const B: Integer): Integer;

begin

  result := A + B;

end;

 

function TNewService.GetServerTime: DateTime;

begin

  result := Now;

end;

  • f9(或选择RemObjects SDK | Launch Server Executable 菜单)启动服务.

测试服务

现在服务已经运行了,我们来测试一下.

打开IE浏览器录入如下URL: http://localhost:8099/BIN

将出现XML文档:

 

OK!服务成功运行并可以用于RO客户端了.我们只是进行了对实际逻辑的编码.

注意:如果你的浏览器没有显示上图的XML文档,或许忘记将ROServer.Active设置为TRUE或输入URL错误了.

附加

打开项目目录,可以看到NewLibrary.rodl文件,其中内容由Service Builder工具维护.

  • Delphi,点击RemObjects SDK| Service Builder.

RemObjects Service Builder 将启动并加载NewLibrary.rodl 文件.

在这个工具中可以向服务中增加方法并自动修改NewLibrary.rodl文件. Sum GetServertime方法是每个RO服务项目生成时自动产生的默认方法.

提示: 这些方法是RO早期为便于新手学习加入的.你如果想修改这个行为也很简单. Windows资源管理器中,找到../ RemObjects SDK for Delphi/Templates 目录双击$svclibname.rodl 文件.将调用Service Builder,从中删除掉这两个方法.

现在需要创建调用这个服务的客户端了,RO06.

  • 如下图设置 Project FolderProject Name as shown below (当然你也可以根据需要设置其他值) :

 

 

提示:向导已经为我们自动的将Message组件关联到了ROServer组件的Disneypatchers集合属性中了.如果要添加不同的Message组件,要保证将其关联到ROServerDispatcher:

 

 

注意:
1)
新服务向导勾选框:本对话框中也将用于DA.这时,第二个勾选框将可用,便于控制DA服务向导.当直接从RO启动时这个勾选框总是不可用的.
2)
高级项目选项:允许更精细的控制生成代码.最希望修改的是服务库名称(Service Library Name) (默认= NewLibrary) 和服务类(Server Class) (NewService).如果你的服务不是为RO客户端创建的,可能你希望修改Message ClassSOAP, XML-RPC PostMessage (默认是高效的BinMessage).

 

基于本文档的目的,我们保持高级项目选项的默认设置.

  • 不勾选 'Also create a matching client application and a project group'(同时生成匹配的客户端程序和一个项目组)

通常,你希望直接创建客户端应用程序,但是你也需要知道如何创建简单的客户端应用,相应的我们将在RO06中展示.

  • 点击OK, 创建服务端应用.

激活服务

项目已经创建,主窗体显示在Delphi IDE. 在窗体的上面有两个按照我们在向导中选择的Server CLASSMessage CLASS而自动生成的控件.

  • 点击ROServer组件并设置其Active属性为TRUE.

 

一、 简介 1、 RemObjects SDK 综述 欢迎使用RemObjects SDK,这个框架可用简单灵活的方式创建可升级高灵活性的多层系统。 多层系统 一个多层系统分为两层或两层以上。通常人们分为3层: 表示层:终端用户程序,Web页面或可执行文件 业务逻辑/中间层:这个层的对象(运行于一些不可见的容器中)执行确认和业务逻辑。 数据存储层:通常是数据库。 基于这个基础结构上还有很多其他形式的框架,并且都在我们文档讨论的范围之外.但是你必须知道很重要的一点,创建任何分布式系统都需要一种消息协议让客户端和中间层通讯. 标准的消息协议是RPC-protocol (DCOM的基础), Java的 RMI 或 SOAP. RemObjects SDK适合作什么 为什么当一些协议都是适用的我们还要”重复制造车轮”?这有以下几个原因: 对于DCom,如果你所有的机器都运行Windows系统并且你会配置安全,他可以在局域网中运行的很好.但COM/DCOM对Windows和Unix的通讯不适用.事实上他是Windows上的标准.而且你要在你的机器上使用基于HTTP的COM对象就必须为RPC-通讯打开防火墙的几个端口. 对于RMI,RMI是针对Java的. Borland从来没有提供和RMI通讯的工具.就算有这种工具,你还是不能和COM对象通讯. 而SOAP呢?它是唯一的公认标准消息. 看起来他实现了互用性,但是却建立在解析XML高代价之上. 除非你有高速网络或只需要发送很小的包,否则你很难使用它. 这样的例子还很很多. RemObjects的目标 RemObjects为实现下面的目标而设计: 简单:开发者不需要是专家,不需要很长的时间就可以为网络中的电脑或Internet的客户端中发布自己的简单服务.Delphi开发者不用面对自己不熟悉的语法.并且你可以轻松的理解他的原理. 高效:我们通常在本机的两个进程通讯时使用Socket,使用标准协议像Soap做客户端和服务器的通讯,为什么没有一种通用的方式可以发布我们的服务呢?RemObjects SDK允许我们创建高效的服务,并可以使用我们需要的协议方式通讯. 灵活:RemObjects SDK使用TCP/IP,HTTP,和Windows消息作为传输信道.而我们要使用UDP或管道时我们就可以轻松的创建新的信道,只要通知服务器和客户端即可,不用修改其他部分.RemObjects SDK的插入式框架可以让我们写一个简单的函数或实现一个接口IROTransportChannel即可建立新的通讯信道而扩展基础框架.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值