其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi中MIDAS的全面学习[1]


发布日期:2021年07月06日
 
Delphi中MIDAS的全面学习[1]

(一)MIDAS是什么?

Delphi中MIDAS到底是什么呢?和他相关组件是什么呢?MIDAS(Multitiered Distributed Application Services)多层分布式应用服务

Delphi所提出的MultiTier结构是把原来的TwoTier前台应用程序内的dbExpressADOBDESQL LinkDataMoule拿到另外一台NT服务器(就是所谓的应用程序服务器)而前台程序只剩下一个可执行文件及MIDASDLL而移到NT服务器上的DataMoule则变成一个COM程序(Remote DataModule)

注:前台一定要把MIDASDLL发布到系统目录下

()前台程序会通过调用应用程序服务器提供的方法(接口)提出一个请求应用程序服务器会响应这个请求传送一个相应的SQL命令到后台数据库而后台数据库会把执行SQL命令产生的DataSet返回给应用程序服务器

注:Delphi提供了Type Library来帮助应用程序服务器定义COM方法(接口)

()NT服务器上的COM程序是通过中间软件(dbExpressADOBDESQL Link)传送SQL到后台数据库当应用程序服务器要把读取到的DataSet传送给前台时就必须利用DCOM的机制来进行Delphi提供的TDataSetProvider组件就会把读取到的DataSet压缩并且分割成一段一段的数据包通过DCOM或TCP/IP传给前台

注:Delphi提供了RemoteDataModule向导来帮你产生COM程序的结构

由于Delphi的程序具有传送DataSet的特殊机制所以Delphi也实现了一个接口叫做IProvider(即TDataSetProvider)来帮助应用程序服务器上的COM程序发送DataSet数据

()前台程序与NT服务器上的COM程序是通过DCOM的机制互相沟通

前台的应用程序是通过MIDASDLL和应用程序服务器相互沟通前台的MIDASDLL会把接收到的应用程序服务器发过来的数据包再还原成DataSet丢给前台程序中的TClientDataSet组件

注:前台程序必须提供相应的TClientData组件来和应用程序服务器上的每个IProvider(即TDataSetProvider)对应用户 修改前台数据时修改的只是Cache(缓存)在前台的Dataset最后要通过TClientDataApplyUpdate方法来把前台变动的数 据写回到后台数据库中

(二)创建并注册MIDAS应用程序服务

Delphi中如何创建并注册MIDAS应用程序服务器COM程序?

Delphi提供一些向导(如:RemoteDataModuleAutomation ObjectTypeLibrary)来自动产生COM程序的结构

(法)创建一个普通应用程序服务器

新建一个普通工程然后通过New>Other>Multitier>Remote DataModule来自动新建一个COM服务器结构

注: 要注册创建的MIDAS应用服务器可以运行应用程序或者使用/REGSERVER开关运行程序

(法)创建一个NTService类型的应用程序服务器这样就无需登陆系统也能启动应用程序服务器避免断电重启带来的无法访问应用程序服务器的问题

新建一个NTService工程然后通过New>Other>Multitier>Remote Data Module来自动新建一个COM服务器结构

注: 要注册创建的NTService服务器通过/install开关来运行程序

注: MIDAS程序需要客户端注册MIDASDLL和STDVCLDLL动态库

(三)MIDAS应用程序COM服务器实例化模型种类

()Internal Instance

创建一个InProcess的COM程序即DLL服务器

()Single Instance

如果每个客户程序都运行服务器程序的一个实例则使用该模型就是每个连上线的前台程序在服务器上都会有一个对应的应用程序服务器被运行因此每个前台 发出来的查询都会有各自独立Process的应用程序来处理根本无所谓排队的问题但是它会比较占用系统资源影响服务器整体的运行效率

()Multiple Instance

如果客户程序共享服务器程序则使用该模型就是一个应用程序服务器可以同时处理好几个前台程序的链接以技术的层面来解释就是所有前台程序可以共享单一 Process的应用程序服务器该模式的最大好处是激活及运行的效率较快比较不会耗用服务器太多系统资源而且管理上比较方便但是它隐藏着一个不 具备多任务处理的问题如果一个前台用户发出了一个查询请求而且这个查询要求产生的结果可能多大数MB这时候其他在线前台用户发出的查询要求都必须 等待之前的查询要求运行完并得到相应之后才得以继续运行这可能会耗用许多时间而且如果一旦某个前台程序的查询发生错误那么其他在后面排队的查询 请求将会跟着死掉

注:那么到底采用哪种模式来创建应用程序服务器?答案是:按系统需求而定简单的说就是你可以创建两组应用程序服务器一组是采用Multiple Instance模式另一组采用Single Instance模式而你必须把程序的类型分为两种一种是查询数据量较小或是比较不重要的写入操作另一种查询数据量较大或是重要数据的写入操作如 此一来你的前台程序就可以放置两个TDCOMConection来各自连上两个不同模式的应用程序服务器进行不同性质的工作

[] []

               

上一篇:Delphi面向对象的编程方法(二)

下一篇:Delphi中MIDAS的全面学习[2]