使用Delphi XE6 / XE7
我有一个带有两个服务器模块的DataSnap Stand Alone Server。
第一个服务器模块具有“会话”生命周期:
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 :(得分:0)
带有Session LifeCycle的服务器模块就是您的DataSnap服务器的客户端。与常规DataSnap客户端应用程序一样:在会话服务器模块上删除TSQLConnection组件,将Driver属性设置为DataSnap,生成DataSnap客户端类,我认为您已准备就绪。