转载:http://blog.csdn.net/henreash/article/details/2261134

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

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

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

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

选择服务类型

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

  • 在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组件,要保证将其关联到ROServer的Dispatcher项:

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

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

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

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

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

激活服务

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

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

RO05 - 如何编写RemObjects SDK服务端 (Delphi Version)的更多相关文章

  1. TYPESDK手游聚合SDK服务端设计思路与架构之二:服务端设计

    在前一篇文中,我们对一个聚合SDK服务端所需要实现的功能作了简单的分析.通过两个主要场景的功能流程图,我们可以看到,作为多款游戏要适配多个渠道的统一请求转发中心,TYPESDK服务端主要需要实现的功能 ...

  2. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

  3. TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知

    经过前两篇文字的分析与设计,我们已经可以搭建出一个能够支持多游戏多渠道的聚合SDK服务端,但这只是理想化状态下的一个简化模型.如果接入渠道的逻辑都是按照理想化的简化过程来构建,那么对于支付的请求,我们 ...

  4. TYPESDK手游聚合SDK服务端设计思路与架构之四:流程优化之信息安全与订单校验

    有了前文几个步骤的分析和设计,TYPESDK的信息交互流程已经可以正常工作了,但是,这个流程还没有考虑到支付这样的过程中,至关重要的信息安全问题. 在整个交互过程中,游戏服务端,SDK服务端,渠道服务 ...

  5. RemObjects SDK Source For Delphi XE7

    原文:http://blog.csdn.net/tht2009/article/details/39545545 1.目前官网最新版本是RemObjects SDK for Delphi and al ...

  6. 使用Thrift RPC编写程序(服务端和客户端)

    1. Thrift类介绍 Thrift代码包(位于thrift-0.6.1/lib/cpp/src)有以下几个目录: concurrency:并发和时钟管理方面的库processor:Processo ...

  7. java SDK服务端推送 --极光推送(JPush)

    网址:https://blog.csdn.net/duyusean/article/details/86581475 消息推送在APP应用中越来越普遍,来记录一下项目中用到的一种推送方式,对于Andr ...

  8. VB6+Winsock编写的websocket服务端

    早就写好了,看这方面资料比较少,索性贴出来.只是一个DEMO中的,没有做优化,代码比较草.由于没地方上传附件,所以只把一些主要的代码贴出来. 这只是服务端,不过客户端可以反推出来,其实了解了webso ...

  9. C#编写Windows服务程序 (服务端),client使用 消息队列 实现淘宝 订单全链路效果

    需求: 针对 淘宝提出的 订单全链路 产品接入 .http://open.taobao.com/doc/detail.htm?id=102423&qq-pf-to=pcqq.group oms ...

随机推荐

  1. Python: Lambda Functions

    1. 作用 快速创建匿名单行最小函数,对数据进行简单处理, 常常与 map(), reduce(), filter() 联合使用. 2. 与一般函数的不同 >>> def f (x) ...

  2. WCF 入门(15)

    前言 度过了一个阳光明媚的周末. 一个阴霾的周日夜晚. 第15集 WCF里面的异常处理(1)  Exception handling in WCF 大致看了一下,这个WCF视频里面总共有6集,这个是第 ...

  3. 第三十课:JSDeferred详解1

    本课难度非常大,看一遍,蛋会疼,第二遍蛋不舒服,第三遍应该貌似懂了.初学者莫来,没必要,这完全就是一个研究. JSDeferred是日本高手cho45搞出来的,其易用性远胜于Mochikit Defe ...

  4. 第四课:seajs的模块编译_compile过程

    最近比较闲,我就讲下seajs的模块编译_compile过程. 这里紧接着第三课的例子来讲解.首先是a.js的编译 Module.prototype._compile = function() { 1 ...

  5. 百度地图整合功能分享修正版[ZMap.js] 实例源码!

    ZMap 功能说明 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是 ...

  6. 【Moqui业务逻辑翻译系列】Shipment Receiver Receives Shipment with Packing Slip but no PO

    Shipment Receiver receives shipment. It has invoice tucked into it. Receiver records vendor name, ve ...

  7. iOS开发小技巧--边接受数据边写入文件的两种方法

    一.NSFileHanle 使用注意点:在往文件写入数据时,必须创建一个空的文件 指定文件写入的方式 -- 覆盖还是追加 最后记得关闭 <1>代码是在大文件传输的练习中截取的.写入数据之前 ...

  8. 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之

    最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...

  9. Chrome商店Crx离线安装包下载

    第一步:找到Chrome的扩展应用ID 第二步:输入扩展应用ID 第三步:单击 生成 按钮. 第四步:在这里右键另存为即可下载.

  10. codevs3031 最富有的人

    题目描述 Description 在你的面前有n堆金子,你只能取走其中的两堆,且总价值为这两堆金子的xor值,你想成为最富有的人,你就要有所选择. 输入描述 Input Description 第一行 ...