博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
datasnap回调
阅读量:7080 次
发布时间:2019-06-28

本文共 1502 字,大约阅读时间需要 5 分钟。

回调

除了用REST支持调用DataSnap服务方法外,JSON还用于实现回调方法.DataSnap2010支持客户端回调

函数,使其执行在服务方法上下文中.这样就可以实现客户端调用服务端方法时,服务端就可以调用由客户端传
递好参数的回调函数.

例如,我们修改EchoString方法,向其中添加回调支持.修改后的EchoString方法如下:

function EchoString(Value: string; callback: TDBXcallback): string;

TDBXcallback类定义在DBXJSON单元.在我们实现EchoString方法前,先搞清楚如何在客户端定义回调函

数(毕竟,这是一个可以让服务端调用的客户端方法).

在客户端,我们必须定义一个新类,继承在TDBXCallback,重写其Execute方法.

type

TCallbackClient = class(TDBXCallback)

public

function Execute(const Arg: TJSONValue): TJSONValue; override;

end;

在Execute方法中,有一个TJSONValue类型的参数,可以复制(Clone)这个参数然后设置其具体内

容.Execute方法也返回一个TJSONValue类型的值,这里我们只返回同样的值:

function TCallbackClient.Execute(const Arg: TJSONValue): TJSONValue;

var

Data: TJSONValue;

begin

Data := TJSONValue(Arg.Clone);

ShowMessage('Callback: ' + TJSONObject(Data).Get(0).JSonValue.value);

Result := Data

end;

例如, 在方法实际返回前(如方法正在执行),回调函数将显示EchoString方法传递参数的值.服务端新的

EchoString方法实现需要将String值赋给一个TJSONObject对象,并将其传递给回调函数.如下:

function TServerMethods2.EchoString(Value: string; callback: TDBXcallback): string;

var

msg: TJSONObject;

pair: TJSONPair;

begin

Result := Value;

msg := TJSONObject.Create;

pair := TJSONPair.Create('ECHO', Value);

pair.Owned := True;

msg.AddPair(pair);

callback.Execute(msg);

end;

注意这个回调函数将在客户端执行—然后在服务端Echostring方法执行完毕前返回

最后,在客户端调用EchoString方法也需要修改,因为我们现在要提供一个回调类TCallbackClient的实例,如

下所示:

var

MyCallback: TCallbackClient;

begin

MyCallback := TCallbackClient.Create;

try

Server.EchoString(Edit1.text, MyCallback);

finally

MyCallback.Free;

end;

end;

这个范例阐释了如何在DataSnap2010中使用客户端回调函数.

转载地址:http://dqpml.baihongyu.com/

你可能感兴趣的文章
Java中如何设置表格处于不可编辑状态
查看>>
Java JTable视图窗口滚动并定位到某一行
查看>>
课堂练习
查看>>
HTML学习成果 制作一个空白简历
查看>>
使用mybatis自带工具,自动生成表对应domain、mapper.xml以及dao
查看>>
餐饮ERP相关问题FAQ
查看>>
基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多
查看>>
Matrix Computations 1
查看>>
springboot上传代码到gitlab并发布上线操作
查看>>
FILE * fopen(const char * path,const char * mode);
查看>>
[Flask]sqlalchemy使用count()函数遇到的问题
查看>>
[python](Docker SDK)上传镜像到私有仓库(tls、身份认证)
查看>>
听说是阿里笔试题
查看>>
使用pm2管理nodejs应用
查看>>
MySQL基础之---mysqlimport工具和LOAD DATA命令导入文本文件
查看>>
php 读取文件头部两个字节 判断文件的实际类型
查看>>
异或交换真的比开一个tmp快吗?
查看>>
使用sea.js管理你项目js文件
查看>>
windows device driver 小结感想
查看>>
SQLServer获取临时表列名并判断指定列名是否存在
查看>>