热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RO05-如何编写RemObjectsSDK服务端(DelphiVersion)

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

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.

 


推荐阅读
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 自动调整列的宽度functionDBGridRecordSize(mColumn:TColumnEh):Boolean;{返回记录数据网格列显示最大宽度是否成功}beginResu ... [详细]
author-avatar
glh3112259
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有