简单的Delphi三层程序开发
一年前开发了一个MIDAS的程序,最近修改服务端,可是这个服务无法注册,最后终于找到了解决办法,这个相关文章如下:(算是备份吧)
(一)MIDAS是什么?
Delphi中MIDAS到底是什么呢?和他相关组件是什么呢?
MIDAS(Multitiered Distributed Application Services)多层分布式应用服务。
Delphi所提出的Multi-Tier结构是把原来的Two-Tier前台应用程序内的dbExpress,ADO,BDE,SQL Link,DataMoule,拿到另外一台NT服务器(就是所谓的应用程序服务器),而前台程序只剩下一个可执行文件及MIDAS.DLL,而移到NT服务器上的DataMoule则变成一个COM程序(Remote DataModule).
注:前台一定要把MIDAS.DLL发布到系统目录下.
(1)前台程序会通过调用应用程序服务器提供的方法(接口)提出一个请求
应用程序服务器会响应这个请求,传送一个相应的SQL命令到后台数据库,而后台数据库会把执行SQL命令产生的DataSet返回给应用程序服务器.
注:Delphi提供了Type Library来帮助应用程序服务器定义COM方法(接口)
(2)NT服务器上的COM程序是通过中间
软件(dbExpress,ADO,BDE,SQL Link)传送SQL到后台数据库.
当应用程序服务器要把读取到的DataSet传送给前台时,就必须利用DCOM的机制来进行.Delphi提供的TDataSetProvider组件就会把读取到的DataSet
压缩并且分割成一段一段的数据包,通过DCOM或TCP/IP传给前台.
注:
Delphi提供了RemoteDataModule向导来帮你产生COM程序的结构.
由于Delphi的程序具有传送DataSet的特殊机制,所以Delphi也实现了一个接口叫做IProvider(即TDataSetProvider),来帮助应用程序服务器上的COM程序发送DataSet数据.
(3)前台程序与NT服务器上的COM程序是通过DCOM的机制互相沟通
前台的应用程序是通过MIDAS.DLL和应用程序服务器相互沟通,前台的MIDAS.DLL会把接收到的应用程序服务器发过来的数据包再还原成DataSet,丢给前台程序中的TClientDataSet组件.
注:前台程序必须提供相应的TClientData组件来和应用程序服务器上的每个IProvider(即TDataSetProvider)对应.用户 修改前台数据时,修改的只是Cache(缓存)在前台的Dataset,最后要通过TClientData.ApplyUpdate方法来把前台变动的数 据写回到后台数据库中.
(二)创建并注册MIDAS应用程序服务
Delphi中如何创建并注册MIDAS应用程序服务器COM程序?
Delphi提供一些向导(如:RemoteDataModule,Automation Object,TypeLibrary)来自动产生COM程序的结构.
(法1)创建一个普通应用程序服务器
新建一个普通工程,然后通过New->Other->Multitier->Remote DataModule,来自动新建一个COM服务器结构.
注: 要
注册创建的MIDAS应用服务器,可以运行应用程序或者使用/REGSERVER开关运行程序.
(法2)创建一个N
TService类型的应用程序服务器,这样就无需
登陆系统也能启动应用程序服务器,避免断电重启带来的无法访问应用程序服务器的问题.
新建一个NTService工程,然后通过New->Other->Multitier->Remote Data Module,来自动新建一个COM服务器结构.
注: 要注册创建的NTService服务器,通过/install开关来运行程序.
注: MIDAS
程序需要客户端注册MIDAS.DLL和STDVCL40.DLL动态库.
(三)MIDAS应用程序COM服务器实例化模型种类
(1)Internal Instance
创建一个In-Process的COM程序,即DLL服务器.
(2)Single Instance
如果每个客户程序都运行服务器程序的一个实例,则使用该模型.就是每个连上线的前台程序,在服务器上都会有一个对应的应用程序服务器被运行.因此每个前台 发出来的查询都会有各自独立Process的应用程序来处理,根本无所谓排队的问题.但是它会比较占用系统资源,影响服务器整体的运行效率.
(3)Multiple Instance
如果客户程序共享服务器程序,则使用该模型.