Delphi在运行时注册Datasnap服务类

当我们创建Datasnap应用时,需要注册服务类让客户端访问服务器上的方法。一般的做法是使用DSServerClass组件,但有时我们需要在运行时创建它。下面的代码演示了如何这样做,TSimpleServerClass继承自TDSServerClass并重载了Create方法,加入了参数ServerClass, DataSnap Server 和LifeCycle.


type

  TSimpleServerClass = class(TDSServerClass)
  private
    FPersistentClass: TPersistentClass;
  protected
    function GetDSClass: TDSClass; override;
  public
    constructor Create(AOwner: TComponent; AServer: TDSCustomServer; AClass: TPersistentClass; ALifeCycle: String); reintroduce; overload;
  end;

procedure RegisterServerClasses(AOwner: TComponent; AServer: TDSServer);

implementation

constructor TSimpleServerClass.Create(AOwner: TComponent; AServer: TDSCustomServer; AClass: TPersistentClass; ALifeCycle: String);
begin
  inherited Create(AOwner);
  FPersistentClass := AClass;
  Self.Server := AServer;
  Self.LifeCycle := ALifeCycle;
end;

function TSimpleServerClass.GetDSClass: TDSClass;
begin
  Result := TDSClass.Create(FPersistentClass, False);
end;

现在在做的就是为每个服务类初始化TSimpleServerClass,下面的代码在同一个服务中注册了3个生命周期不同的类:

procedure RegisterServerClasses(AOwner: TComponent; AServer: TDSServer);
begin
  Assert(AServer.Started = false, 'Can''t add class to non active Server');
  TSimpleServerClass.Create(AOwner, AServer, TGlobal, TDSLifeCycle.Server);
  TSimpleServerClass.Create(AOwner, AServer, TCustomer, TDSLifeCycle.Session);
  TSimpleServerClass.Create(AOwner, AServer, TObjectPool, TDSLifeCycle.Invocation);
end;

简单易用。


http://www.andreanolanusse.com/en/registering-datasnap-server-class-in-runtime-with-delphi/

你可能感兴趣的:(Delphi在运行时注册Datasnap服务类)