创建 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.客户端连接到 DSTCPServerTransport12.连接到 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 为当前连接创建一个新实例,然后执行相关方法。执行结束后释放该实例。研究不同生命周期的执行顺序,对我们实现数据库连接以及对象池技术,有着重要的指导作用。
相关文章推荐
- 创建 Delphi DataSnap 程序的问题集萃(1)
- 创建 Delphi DataSnap 程序的问题集萃(3)
- 创建 Delphi DataSnap 程序的问题集萃(4)
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (-)启动创建好的DBExpress工程时候报错了!
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (-)启动创建好的DBExpress工程时候报错了!
- Delphi2010中使用DataSnap创建服务器时出现Socket Error# 10013的问题的解决方法
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (三)用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi 的一个加密和压缩组件 (用于DataSnap多层程序中)
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (三)用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- 让Delphi的DataSnap发挥最大效率
- 关于Delphi xe5 firemonkey 手机屏幕自适应程序问题
- 用 Delphi 创建系统服务程序
- 用Delphi创建服务程序 --转载
- c++test使用qt中的 mingw 创建pthread_create程序无法运行的问题
- delphi创建具有托盘的服务程序(service)