最近,学习XE6下的DataSnap回叫技术编译代码,体会如下:
第一篇 服务器与客户端回叫
   从Delphi2010开始,DataSnap支持回叫(Call Back)机制。这样,在调用耗时较长的方法时,通过回叫机制,返回服务器进程或正在处理的目标对象。
    一、客户端实现步骤     在客户端声明TClientModule1的单元文件uClientModule中:     1、声明一个从TDBXCallback继承下来的对象(用于回叫参数值),并实现复载的步骤。
type   TInitCallback = class(TDBXCallback)     function Execute(const Arg: TJSONValue): TJSONValue; override;   end;
  TProgCallback = class(TDBXCallback)     function Execute(const Arg: TJSONValue): TJSONValue; override;   end;
    2、初始化创建该对象
Initialization      // 初始化 创建   InitCallback := TInitCallback.Create;   ProgCallback := TProgCallback.Create;
    3、实现声明的方法
function TProgCallback.Execute(const Arg: TJSONValue): TJSONValue; begin   with MainFrm do   begin     ProgressBar1.Position  := TJSONNumber(Arg).AsInt;     Button5.Enabled := (TJSONNumber(Arg).AsInt = ProgressBar1.Max);   end;   //刷新屏幕   Application.ProcessMessages;   Result := TJSONNull.Create;     // 回传Null值 end;
function TInitCallback.Execute(const Arg: TJSONValue): TJSONValue; begin   with MainFrm do   begin     ProgressBar1.Max := TJSONNumber(Arg).AsInt;     ProgressBar1.Step := 5;     Edit1.Text := '总时长:' + TJSONNumber(Arg).ToString + '秒';     Button5.Enabled := False;   end;   Result := TJSONNull.Create; end;
    4、调用回叫方法 procedure TMainFrm.Button5Click(Sender: TObject); begin   ClientModule1.ServerMethods1Client.LongTimeRunFunc(InitCallback, ProgCallback); end;
    二、服务器端实现步骤     在服务器端声明TServerMethods1的单元文件uServerMethods中:     1、编写一个带回叫机制的方法     在方法的形参中,带入客户端的回叫参数:
function TServerMethods1.LongTimeRunFunc(InitCallback, ProgCallback: TDBXCallback): boolean; var Max: Integer;     I: Integer; begin   Max := Random(120) + 1;   InitCallback.Execute(TJSONNumber.Create(Max)).Free;   // 将Max值通过JSON格式,通过InitCallback执行回叫后,释放该对象   for I := 0 to Max do   begin     ProgCallback.Execute(TJSONNumber.Create(I)).Free;   // 将I值通过JSON格式,通过ProgCallback执行回叫后,释放该对象     sleep(1000);   end;   Result := True; end;
    2、声明该方法
  public     { Public declarations }     function LongTimeRunFunc(InitCallback, ProgCallback: TDBXCallback): boolean; 
    三、客户端声明服务器端输入方法的对象     服务器端声明的方法(对象),需要在客户端中声明,才能使得二者之间实现数据传递。     1、执行服务器端程序。     2、在客户端的ClientModule1的单元,通过鼠标右键点击SQLConnection1,选择“Generate DataSnap client classses”项目。
    四、运行机制     客户端声明的TProgCallback是继承TDBXCallback的对象,它复载虚方法Execute,在服务器端运行,接受一个TJSONValue的参数,并且回传一个TJSONValue的结果值。TDBXCallback的回叫机制很有意思:服务器端在回叫客户端的方法时,可以将需要回传缎带客户端的值或对象,以TJSONValue的形式,当作虚方法Execute的参数回传缎带客户端,而客户端的方法,在被回叫执行完毕后,也可以将执行结果,以TJSONValue的形式,回传给服务器端。

更多0

转载于:https://www.cnblogs.com/HuiLove/p/3964407.html

datasnap的客户端回传机制相关推荐

  1. 客户端回传事件接口IPostBackEventHandler

    客户端回传事件接口IPostBackEventHandler 要使控件捕获回发事件,控件必须实现System.Web.UI.IPostBackEventHandler 接口.此接口约定允许控件在服务器 ...

  2. ASP.NET 事件(回传)机制

    摘要: ASP.ENT中,有两种实现页面PostBack的机制,不管是哪种回传方式,最终均是Form表单提交. 一.原始的Form表单提交 WebControls中的Button和ImageButto ...

  3. Android客户端缓存机制(文字缓存和多媒体文件缓存)

    概述: 客户端缓存机制是Android应用开发中非常重要的一项工作,使用缓存机制不仅仅可以为用户节省3G流量,同时在用户体验方面也是非常好的选择. 缓存机制分为两部分,一部分是文字缓存,另一部分是多媒 ...

  4. ASP.NET WebForm 回传机制

    为什么每个WebForm.aspx都必须包含在form之中 <form id="form1" runat="server">//html </ ...

  5. redistemplate给hash存储设置有效期_客户端较为常用的存储机制

    哈喽~朋友们,好久不更新了,你们还记得我吗? 前段时间我过得太颓废了,该做的事没有做,天天刷某音,导致自己非常的焦虑和烦躁.后来觉得不能这样下去,于是进行了严肃的自我反省和自我批评.希望自己能慢慢地调 ...

  6. 【HTTP】客户端识别与cookie机制

    ​ 做数据产品时,我们会经常遇到用户隐私问题(如,禁止追踪).在最新的Chrome浏览器中该选项已被默认选中设置=>显示高级设置=>随浏览流量一起发送"不跟踪"请求开启 ...

  7. 【转】Asp.net控件开发学习笔记整理篇 - Asp.net客户端状态管理

    最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...

  8. asp.net页面回传与js调用服务端事件、PostBack的原理详解

    ASP.ENT中,有两种实现页面PostBack的机制,不管是哪种回传方式,最终均是Form表单提交. 一.原始的Form表单提交 WebControls中的Button和ImageButton控件, ...

  9. Asp.net控件开发学习笔记(六)----数据回传

    在Asp.net中,利用Http Post的回传机制意味着可以再客户端存储状态并且可以在服务器接收.Asp.net中大部分控件都提供了存储自身状态的功能并且在自身状态改变时引发对应事件.IPostDa ...

最新文章

  1. 2022-2028年中国电容器用薄膜行业市场研究分析及投资前景展望报告
  2. 三层加过的注释java_spring框架中三层架构相关的注解
  3. 人脸检测与识别的趋势和分析
  4. Spring核心组件的理解
  5. mpi4py安装报错error: Cannot compile MPI programs. Check your configuration!!!
  6. 扎克伯格拒绝参加加拿大议会 或因藐视罪名被拘留
  7. cocos2dx 简单血量条实现
  8. MySQL 5.6 for Windows 解压缩版配置安装(转)
  9. 使用NBU备份数据文件和Oracle
  10. IE浏览器GET请求中文乱码
  11. Windows Terminal 使用 pem 文件连接服务器
  12. tomcat5下get请求中文乱码
  13. 中国平板显示产业运行状况及前景规划建议报告2022-2027年版
  14. 游戏模型制作的注意事项 项目模型规范总结
  15. 食品药品舆情传播规律分析
  16. 使用Python遍历文件夹下文件寻找关键词
  17. Intel第十代CPU集成显卡不再支持 Legacy启动 (i5-10400...)
  18. CV10 图像模糊(均值、高斯、中值、双边滤波)
  19. 电信JAVA手机_手机modem开发(28)—开发电信VoLTE开关默认值设置
  20. 12、Bootstrap和ServerBootstrap啥关系

热门文章

  1. mysqlls_mysql基本命令
  2. 学习UI设计都需要了解哪些知识
  3. 物联网技术正颠覆传统医疗行业
  4. 利用.htaccess绑定子域名到子目录(亲测万网可用)
  5. excel增加上一列的数值(日期)
  6. IE调试网页之一:F12 开发人员工具简介
  7. VLAN-VTP-Trunk
  8. 转:入侵网站必备-sql server
  9. Hadoop-2.7.4 集群快速搭建
  10. java 线程 thread.join_java线程Thread的join方法。