RO05 - 如何编写RemObjects SDK服务端 (Delphi Version)
转载:http://blog.csdn.net/henreash/article/details/2261134
本文档向你展示如何使用RemObjects(Delphi版)创建第一个服务.读了本文档后你可以继续读相关文档:
RO06:如何创建RemObjects客户端(Delphi版).
你可以把本文档当作一个范例并牢记创建步骤. 本文相关项目完整代码在文档底部有下载连接.
选择服务类型
第一步主要是选择一个你要创建的服务类型.
- 在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 Folder和Project 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)的更多相关文章
- TYPESDK手游聚合SDK服务端设计思路与架构之二:服务端设计
在前一篇文中,我们对一个聚合SDK服务端所需要实现的功能作了简单的分析.通过两个主要场景的功能流程图,我们可以看到,作为多款游戏要适配多个渠道的统一请求转发中心,TYPESDK服务端主要需要实现的功能 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知
经过前两篇文字的分析与设计,我们已经可以搭建出一个能够支持多游戏多渠道的聚合SDK服务端,但这只是理想化状态下的一个简化模型.如果接入渠道的逻辑都是按照理想化的简化过程来构建,那么对于支付的请求,我们 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之四:流程优化之信息安全与订单校验
有了前文几个步骤的分析和设计,TYPESDK的信息交互流程已经可以正常工作了,但是,这个流程还没有考虑到支付这样的过程中,至关重要的信息安全问题. 在整个交互过程中,游戏服务端,SDK服务端,渠道服务 ...
- RemObjects SDK Source For Delphi XE7
原文:http://blog.csdn.net/tht2009/article/details/39545545 1.目前官网最新版本是RemObjects SDK for Delphi and al ...
- 使用Thrift RPC编写程序(服务端和客户端)
1. Thrift类介绍 Thrift代码包(位于thrift-0.6.1/lib/cpp/src)有以下几个目录: concurrency:并发和时钟管理方面的库processor:Processo ...
- java SDK服务端推送 --极光推送(JPush)
网址:https://blog.csdn.net/duyusean/article/details/86581475 消息推送在APP应用中越来越普遍,来记录一下项目中用到的一种推送方式,对于Andr ...
- VB6+Winsock编写的websocket服务端
早就写好了,看这方面资料比较少,索性贴出来.只是一个DEMO中的,没有做优化,代码比较草.由于没地方上传附件,所以只把一些主要的代码贴出来. 这只是服务端,不过客户端可以反推出来,其实了解了webso ...
- C#编写Windows服务程序 (服务端),client使用 消息队列 实现淘宝 订单全链路效果
需求: 针对 淘宝提出的 订单全链路 产品接入 .http://open.taobao.com/doc/detail.htm?id=102423&qq-pf-to=pcqq.group oms ...
随机推荐
- jQuery理解之(一)动画与特效
本节主要降级和学习jQuery的自动显隐,渐入渐出.飞入飞出.自定义动画等. 1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,本节简单介绍jQuery的显示和隐藏 ...
- 【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 ...
- PHP时间日期比较
若要使用PHP来比较日期,最好用DateTime::diff 但是这个是5.3才支持的,如果没有这样的环境,可以使用<.>来比较 如下例子,会输出right $date1=strtotim ...
- iOS开发中的错误整理,关于用绑定Tag取控件的注意事项,有时候不绑定也是个错!
如图:红色框中是个自定义的导航工具条titlesView(没有绑定Tag),工具条中有五个按钮(按钮绑定了Tag)以及一个红色的指示器indicatorView(没有绑定Tag),下面的蓝色是可以滚动 ...
- Activiti 学习资料收集
Activiti工作流引擎使用 http://www.open-open.com/lib/view/open1350460225367.html Activiti初学者教程 http://blog.c ...
- Tomcat server.xml详解
Server.xml的结构大致 <Server port="8005" shutdown="SHUTDOWN"> <Service name= ...
- Throwable和Exception的区别
Java语言要求java程序中(无论是谁写的代码)所有抛出(throw)的异常都必须是从Throwable派生而来.当然,实际的Java编程中,由于JDK平台已经为我们设计好了非常丰富和完整的异常对象 ...
- 【CodeForces 621B】Wet Shark and Bishops
题 题意 1000*1000的格子里,给你n≤200 000个点的坐标,求有多少对在一个对角线上. 分析 如果求每个点有几个共对角线的点,会超时. 考虑到对角线总共就主对角线1999条+副对角线199 ...
- NOIP 2014 Day1 T3飞扬的小鸟
题目描述:http://codevs.cn/problem/3729/ 表示各种shabi的我编和调了半天,思路大体就是一个完全背包的模型,不过会多一些额外的转移(因为题目限制高度之类的),不过值得注 ...
- P1391 走廊泼水节
时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老 ...