回调 除了用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)这个参数然后设置其具体内 function TCallbackClient.Execute(const Arg: TJSONValue): TJSONValue; var Data: TJSONValue; begin Data := TJSONValue(Arg.Clone);
Result := Data end; 例如, 在方法实际返回前(如方法正在执行),回调函数将显示EchoString方法传递参数的值.服务端新的 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中使用客户端回调函数. |
|
来自: aaie_ > 《datasnap》