您的位置:首页 > 编程语言 > Delphi

创建 Delphi DataSnap 程序的问题集萃(2)

2013-12-29 10:04 288 查看
(本文所讨论的开发环境,为 Delphi XE5)
我们来看一看 DataSnap 服务器端各单元的创建顺序。
以一个标准的 VCL 服务器端为例,创建方法如下:
1.打开 XE5 的菜单 File - New - Other,选择 Datasnap Server - Datasnap Server,“下一步”中分别选择 “VCL Forms Application” - “默认” - “默认” - “TDSServerModule”,建好后,项目中一共 3 个单元,如下图:
其中,ServerMethodsUnit1 提供了服务的实现方法。它由 ServerContainerUnit1 容器中的 DSServerClass1 代理,默认的生命周期是:Session。
该服务器端运行时,首先创建了 Unit2 对应的 Form2,接着创建了 ServerContainerUnit1 容器。记住, ServerContainerUnit1 容器是在服务器端一开始运行时就创建,直到服务器端关闭、停止服务时才结束。

[code]    ServerContainerUnit1 容器如下图所示,含 DSServer1、 DSServerClass1、DSTCPServerTransport1 三个控件:
当客户端连接上服务器并调用 ServerMethodsUnit1 中的方法时,按以下顺序执行:[/code]
1.客户端连接到 DSTCPServerTransport1
2.连接到 DSServer1[/code]
3.通过 DSServerClass1 创建一个新实例:ServerMethodsUnit1,然后执行相关方法。
客户端断开时,按以下顺序断开:
4.断开 DSServer1
5.断开连接 DSTCPServerTransport1
这里要说明的是,ServerMethodsUnit1 的生命周期。
在服务端可以不止一个 ServerMethodsUnit,每个 ServerMethodsUnit 在 ServerContainerUnit1 容器中分别指定一个 DSServerClass 代理,可以为每个 ServerMethodsUnit 单独指定一种生命周期。对于 3 种不同生命周期的服务方法,调用时的执行方法也略有不同。
(一) LifeCycle = Server
执行到第 3 步时有变化。 3.如果 ServerMethodsUnit1 实例不存在,则通过 DSServerClass1 创建一个新实例,然后执行相关方法;否则,直接调用该实例的相关方法。该实例一直到服务停止才释放。
(二) LifeCycle = Session
第 1 步的变化:如果第一次连接,则连接到 DSTCPServerTransport1 ;否则跳过该步骤
    第 2 步的变化:如果第一次连接,则连接到 DSServer1 ;否则跳过该步骤
第 3 步的变化:3.如果当前连接的 ServerMethodsUnit1 实例不存在,则通过 DSServerClass1 为当前连接创建一个新实例,然后执行相关方法;否则,直接调用该实例的相关方法。该实例一直到当前连接断开时释放。
(三) LifeCycle = Invotation
第 3 步的变化:3.通过 DSServerClass1 为当前连接创建一个新实例,然后执行相关方法。执行结束后释放该实例。
研究不同生命周期的执行顺序,对我们实现数据库连接以及对象池技术,有着重要的指导作用。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐