zoukankan      html  css  js  c++  java
  • MIDAS RemoteDataModule

    (一)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)创建一个NTService类型的应用程序服务器,这样就无需登陆系统也能启动应用程序服务器,避免断电重启带来的无法访问应用程序服务器的问题.
            新建一个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
         如果客户程序共享服务器程序,则使用该模型.就是一个应用程序服务器可以同时处理好几个前台程序的链接,以技术的层面来解释就是所有前台程序可以共享单一 Process的应用程序服务器.该模式的最大好处是,激活及运行的效率较快,比较不会耗用服务器太多系统资源,而且管理上比较方便.但是它隐藏着一个不 具备多任务处理的问题,如果一个前台用户发出了一个查询请求,而且这个查询要求产生的结果可能多大数MB,这时候,其他在线前台用户发出的查询要求都必须 等待之前的查询要求运行完并得到相应之后,才得以继续运行.这可能会耗用许多时间,而且,如果一旦某个前台程序的查询发生错误,那么其他在后面排队的查询 请求将会跟着死掉.
       注:那么到底采用哪种模式来创建应用程序服务器?答案是:按系统需求而定.简单的说就是,你可以创建两组应用程序服务器,一组是采用Multiple Instance模式,另一组采用Single Instance模式,而你必须把程序的类型分为两种,一种是查询数据量较小或是比较不重要的写入操作,另一种查询数据量较大或是重要数据的写入操作.如 此一来,你的前台程序就可以放置两个TDCOMConection来各自连上两个不同模式的应用程序服务器,进行不同性质的工作.

    (四)MIDAS线程模型
    (1)Single
         代表所产生的In-Process COM程序是一个单一线程的程序,一次只能接收一个client发出来的request,由于是循环的操作,所以不会有多任务同时进行的问题,你的COM程序不需要编写多任务处理的部分.
    (2)Apartment
         代表每一个Remote Data Module所产生的instance一次只能处理一个前台发出的request,可是如果同时创建多个In-Process COM程序,那么每个COM程序都会有一个线程来处理,每个instance所处理的数据是安全的,可是你必须防止一些共享变量的冲突.
    (3)Free
         该线程模式可以让Remote Data Module产生的每个instance通过各自的线程处理每个前台发出的request,所以Remote Data Moudle本身必须采用多线程的程序写法,你必须保护每个instance所处理的数据区域不会互相冲突..当使用ADO数据集时,推荐使用Free模型.
    (4)Both
         与Free相同,除了所有对应前台界面的callback是连续的以外.
    (5)Neutral
         此种模式允许多个前台程序在同一个时间以不同的线程来调用Remote Data Module,不过COM对象必须确保不会有前台程序调用的冲突,你要确定每个线程在访问全局变量及实例数据时,不会发生任何冲突.这个模式只适用在COM+.

    (五)MIDAS前台程序连接到后台应用程序服务器
    (1)SocketConnection:
         只要前台计算机安装有TCP/IP的通信协议即可,但是Application Server上必须要有对应的SocketServer程序scktsrvr.exe
    (2)DCOMConnection:
         如果前台计算机系统是Win95,则必须安装DCOM form Win95(去Microsoft网站下载),如果系统是Win98,Me,NT等,则已经包含DCOM Library
    (3)Corbaconnection:
         必须安装Visic Broker即Delphi专用的Corba ORB文件,这些文件名称分别是:Orbpas.dll,cw3240mt.dllorb_r.dll,请把这些文件复制到前台计算机的的系统目录下.同样的Application Server上也不需安装.
    (4)WebConnection:
         只要前台计算机安装有TCP/IP协议即可,但是Application Server上必须安装一套Web Server,并且必须把httpsrvr.dll文件安装到Web Server虚拟目录下,再把WebConnection的属性URL指向此虚拟路径即可.
       注:不论采取何种Connection组件,都会用到Midas.dll文件,所以打包时一定要把它分发到前台计算机的系统目录下去.
      
    (五)MIDAS如何控制前台权限
    (1)原理:
         前台程序与应用程序服务器之间是通过DCOM机制的运行来传送数据,DCOM对象的安全机制是以Windows NT的安全模块为构建基础,换句话说,要设置某个用户是否有远程运行DCOM对象的能力,最基本的条件是这个用户一定要被加入Windows NT的用户组内,如此才有资格连上Windows NT Server,并进而依据DCOM的权限来决定是否能够运行指定的应用程序服务器.
    (2)工具:
         在系统目录下有一个DCOMCNFG.EXE工具,可以用来设置应用程序服务器的运行权限.
    (3)自己通过程序控制(也许更可取,避免了配置人员的配置复杂性)
  • 相关阅读:
    cf C. Vasya and Robot
    zoj 3805 Machine
    cf B. Vasya and Public Transport
    cf D. Queue
    cf C. Find Maximum
    cf B. Two Heaps
    cf C. Jeff and Rounding
    cf B. Jeff and Periods
    cf A. Jeff and Digits
    I Think I Need a Houseboat
  • 原文地址:https://www.cnblogs.com/brightsea/p/1992028.html
Copyright © 2011-2022 走看看