使用DataSnap从另一个服务器模块创建Delphi服务器模块的最佳方法是什么?

使用DataSnap从另一个服务器模块创建Delphi服务器模块的最佳方法是什么?

问题描述:

使用Delphi XE6/XE7使用DataSnap从另一个服务器模块创建Delphi服务器模块的最佳方法是什么?

我有一个带有两个服务器模块的DataSnap独立服务器。

的第一个服务器模块具有“会话”生命周期:

object DSServerSession: TDSServerClass 
    OnGetClass = DSServerSessionGetClass 
    Server = DSServer1 
    LifeCycle = 'Session' 
end 

procedure TServerContainer1.DSServerSessionGetClass(
    DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass); 
begin 
    PersistentClass := uSM.TSM; 
end; 

第二个服务器模块具有“服务器”生命周期:

object DSServerGlobal: TDSServerClass 
    OnGetClass = DSServerGlobalGetClass 
    Server = DSServer1 
    LifeCycle = 'Server' 
end 

procedure TServerContainer1.GlobalGetClass(DSServerClass: TDSServerClass; 
    var PersistentClass: TPersistentClass); 
begin 
    PersistentClass := uSMGlobal.TSMGlobal; 
end; 

然后,客户机应用程序可以访问在全局对象服务器模块(如用户控制功能),而对数据库的请求则使用会话服务器模块进行。在应用程序的客户端,我使用SQLConnection和TDSProviderConnection。

我的问题是,从同一服务器上的会话服务器模块访问全局服务器模块(生命周期=会话)的最佳方式是什么?请注意,我们没有使用DataModules的模块(如客户机/服务器应用程序)的全局引用(变量)。最重要的是,我需要确保客户端应用程序和会话服务器模块使用全局服务器模块的相同实例。

+0

我只会在生命周期=会话中使用1个服务器模块。然后用你的全局函数创建一个不同的datamodule类。然后为这个数据模块创建一个静态的参考。在客户端第一次连接时创建它。 – 2014-09-05 07:35:42

具有会话LifeCycle的服务器模块在您的情况下是您的DataSnap服务器的客户端。与常规的DataSnap客户端应用程序一样:在会话服务器模块上放置TSQLConnection组件,将Driver属性设置为DataSnap,生成DataSnap客户端类,然后就可以开始使用了。