zoukankan      html  css  js  c++  java
  • datasnap回调

    回调

    除了用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中使用客户端回调函数.

  • 相关阅读:
    win7下的nginx小demo
    破解navicat
    MVC下用C#实现Excel导出
    使用IE10登录,URL出现SessionId的解决办法
    C#错误:The Controls collection cannot be modified
    更改数据库排序规则
    windows server 2008 r2电脑历史操作记录
    jquery easyui无法绑定下拉框内容
    Jquery实现自动提示下拉框
    CLSID {91493441-5A91-11CF-8700-00AA0060263B}错误
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2347151.html
Copyright © 2011-2022 走看看