【问题标题】:What is the best way to create a Delphi Server Module from another Server Module using DataSnap?使用 DataSnap 从另一个服务器模块创建 Delphi 服务器模块的最佳方法是什么?
【发布时间】:2014-09-05 14:54:16
【问题描述】:

使用德尔福 XE6 / XE7

我有一个带有两个服务器模块的 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 的客户端/服务器应用程序。最重要的是,我需要确保客户端应用程序和会话服务器模块都使用相同的全局服务器模块实例。

【问题讨论】:

  • 我只会使用 1 个具有生命周期 = 会话的服务器模块。然后使用您的全局函数创建一个不同的数据模块类。然后创建一个对此数据模块的静态引用。在客户端第一次连接时创建它。

标签: delphi datasnap


【解决方案1】:

在您的情况下,具有会话生命周期的服务器模块是 DataSnap 服务器的客户端。与常规 DataSnap 客户端应用程序一样:将 TSQLConnection 组件放在 Session Server Module 上,将 Driver 属性设置为 DataSnap,生成 DataSnap 客户端类,我想你已经准备好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2010-09-19
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多