两层转三层,MIDAS 与 MTS 的问题(220分)

  • 主题发起人 主题发起人 ggqq
  • 开始时间 开始时间
G

ggqq

Unregistered / Unconfirmed
GUEST, unregistred user!
我们有一个系统,是在两层下用D5开发的,已经完成,现在想转换到三层下
我找了李维的系统篇看了,却还有不少问题,想各位指点一下
1、李维说了半天都是MIDAS,我不知道这是不是很标准的东西,有没有实力与潜力
2、我知道 MTS 是微软的东西,而且名声不错,那 D5 对MTS的支持怎样
3、MIDAS 与 MTS 是不是能并存,即一起用
4、以后再添加 WEB 的一块是不是很方便——WEB可能不用 D5 做了,可能用 ASP 或 PHP
也就是说 MIDAS 做的中间件可不可以为其他工具调用
以上几个问题还望大家多多发表评论
 
李維的<<Delphi5.x ADO/MTS/COM+高級程序設計篇>>的第九章<<以Delphi技術開發MTS/COM+應
用系統>>講的就是MIDAS結合MTS/COM+
李維的<<Delphi5.x分散式多層應用電子商務篇>>有講到MIDAS結合ASP作WEB開發
 
不會吧,兩本書名明明打上去了卻沒顯示
一本是<<Delphi5.xADO/MTS/COM+高級程序設計篇>>
一本是<<Delphi5.x分散式多成曾應用電子商務篇>>
 
有人有这方面的实际经验吗?
 
MTS和MIDAS可以很好的结合。但是由于D5没有考虑到将TDCOMConnect放在协调对象中实现。
所以如果你要在协调对象中放TDCOMConnect的话,需要修改Comobj.pas和Provider.pas两个
文件。
具体的看书吧。李维的《ado/mts/com+高级程序设计篇》
 
MIDAS 做的中间件好象在 ASP 中不能调用嘛,那我要是用 MIDAS 做了系统,
以后再做 ASP 的时候难道还要把应用逻辑再写一遍?
 
难道没人再关心这个问题吗?
给一点建议也好啊
 
D5的MIDAS相当支持MicroSoft
我现在做的MIS,客户端用D5和Asp,中间层D5,当然Asp直接调用SQL,中间层直接调用SQL,
中间层和Asp间没有什么直接联系吧,D5的客户端才通过中间层,
不过效果已经很好,不知你还要什么功能啊?
 
delphi是不错,可是midas不成熟
我现在也不知道哪个更好
当然没有完全好的工具
仔细考虑考虑选一个吧
 
下面的内容肯定对你有用:
一、 基础知识
Delphi Multi-tier程序多以MIDAS为基础,因此以MIDAS为基础建立的Delphi Multi-tier程序,客户端和服务器端都要MIDAS.DLL文件的支持。
1) 远程数据模块:
远程数据模块是一个类似于COM Automation Server或是Corba Server的数据模块,它存在于应用程序服务器中,负责提供应用程序服务器上的数据提供者组件(Provider)接口给客户端应用程序使用。Delphi目前提供的远程数据模块有TRemoteDataModule、TMTSDataModule及TCORBADataMadule等三种,分述如下:
l TRemoteDataModule是一个双重接口(Dual Interface)的Automation Server,它提供DCOM、HTTP、TCP/IP(即Windows sockets)及OLEnterprise等通讯协议的客户端成苏使用。
l TMTSDataModule是一个双重接口(Dual Interface)的Automation Server,不过它以Active Library(.DLL文件类型,即COM中的In-process对象)的方式撰写应用服务程序,并将其安装在MTS(Microsoft Transaction Server)中,所以除了具有MTS的优点外,也同样可以供DCOM、HTTP、TCP/IP及OLEnterprise等通讯协议的客户端程序所使用。
l TCORBADataMadule是一个Corba Server,它允许Corba客户端应用程序的连接及数据库的存取。
2) 数据提供者组件(Data Provider):
数据提供者是存在应用程序服务器上的一个组件,负责将TdataSet中取出应用程序所要要求的数据,并进行封装提供给客户端程序。一般来说,一个远程数据模块至少应该包含一个provider组件。其主要功能有如下两点:
l 数据提供:provider组件负责从数据库中提取应用程序所需的数据及用以描述这些数据的元数据,并将其打包后提供给客户端应用程序。
l 数据解析(Resolving):provider组件从客户端获取数据,如果这些数据已被其他的应用程序修改,provider将尝试用目前的数据取代客户端应用程序所作的变更。除此之外,数据提供还会保存无法传送的纪录。
3) 客户端连接组件:
客户端连接组件通常位于客户端应用程序中,负责与应用服务器取得连接,并为客户端数据集组件(Client Dataset Component)建立一个IappServer的存取接口。Delphi 5中共有五中Connection组件,其各自功能如下表所示:
组件名称 通讯协议
TDCOMConnection DCOM
TsocketConnection TCP/IP(Windows Sockets)
TwebConnection HTTP
TCORBAConnection Corba(IIOP)
TOLEnterpriseConnection Olenterprise(RPCs)
4) 客户端数据集组件(Client Dataset Component):
该组件用于从应用服务器取得数据。它通过MIDAS.DLL来管理与组织从应用服务器上所取得的数据包。TclientDataSet与TXMLBroker都属于此类组件。
二、 以TRemoteDataModule组件作为应用程序服务器方法
步骤一、建立新项目,以此组件为服务器,必须建立EXE应用程序项目。
步骤二、建立远程数据模块(file/new…菜单项),并合理设置该模块的属性及事件。
步骤三、在上述远程数据模块中加入Data Access组件或ado data access组件(database、table、query等),并合理设置该模块的属性及事件。
步骤四、在上述远程数据模块中加入TdataSetProvier组件,并设置其Dataset属性为步骤三中缩设置的数据集。
步骤五、如需要,重复步骤四,加入另外的data provider组件。
步骤六、进一步完成程序功能,最后保存、编译上述工程。
步骤七、运行一次所生成的应用程序,完成最后的系统注册工作,如需进一步配置,运行windows提供的DCOMCNFG.EXE程序进行配置。以后该组件将在存在客户请求时自动启动,并在所有请求关闭后自动关闭。
三、 以TMTSDataModule作为应用程序服务器
步骤一、建立新工程,必须建立AVTIVE LIBRARY(即dll工程)类型的工程。
步骤二、向工程中加入MTS DataModule(file/new…菜单中),并设置其参数。
步骤三、向上述数据模块中加入data access组件或ado data access组件。
步骤四、必要时,在view/type library命令调出的窗口中进一步设置该application data server的属性和方法。例如,可以增加一个date属性,此时程序将会自动增加一个名为Get_date的函数,用户只需在此函数框架中加入代码,对Get_date进行赋值(如Get_date:=’2000年’,注意可以使用now直接取得服务器的当前时间),然后客户端的程序就可直接使用该属性了。
步骤五、进一步完善程序,保存、编译程序后使用run/install MTS Objects命令将该dll文件注册到系统中。
步骤六、用户可以利用windows的“组件服务”管理工具对所安装的dll进行进一步的配置。注意:在组件服务窗口中,所有已经被激活的服务的图标都回在不停的转动,以与未激活的dll相区别。
说明:mts方式的主要优点:
1) 可以提供基于角色的安全隔离机制,利用isCallInRole(const role:wideString)函数判断一个用户是否从属于某一个角色。
2) 数据库连接自动调度(pooling),可以转移一个不再使用的连接给另外的用户,减少连接次数,从而提供运行速度。但是应注意一定要将database的keepConnection属性关掉。
3) MTS完整的事务支持。
4) 及时激活服务其功能。
四、 以TCORBADataMoudle建立应用服务器
该种类型的服务器与客户端之间的连接必须在Delphi提供的Visibroker Smart Agent程序运行的前提下才能进行。其结构如下图所示:
BOA: Basic Object Adaptor
步骤一、建立新的项目。
步骤二、“file/new…”菜单中选取Corba DataModule。
步骤三、在上述的Data Module中加入DataAccess或ADO access数据集组件。
步骤四、在上述的DataModule中加入Data provider组件。
步骤五、进一步完善程序,保存并编译程序。
步骤六、注册服务器程序。注意有两种方式可以使用:静态(早期)连接和动态(晚期)连接。Delphi中有Interface Repository和Object Activation Deamon两个公共程序用于注册Corba应用数据服务器。使用后者程序的方法如下:
1) 使用windows程序oadutil,方法如下:
2) oadutil reg –r IDL:(Repository ID)-O (接口对象名)-cpp (应用服务程序路径名) unshared
3) oadutil unreg –r IDL:(Repository ID)-O (接口对象名)
4) 两个可选的参数是:host: 用于指定执行OAD的计算机;p: 代表每以客户端程序都对应一个特定的应用程序服务对象。
5) 注意,可以使用Delphi的VisiBroker Smart Finder程序寻找某台计算机上的CORBA应用服务器程序。
五、 以TDCOMConnection作为客户端应用程序
该方式知识用于企业内部网
步骤一、建立新项目。
步骤二、加入TDCOMConnection组件,设置其computername和ServerName属性,然后置Connected属性为true。
步骤三、加入TclientDataSet组件、DataSource组件、及DataControl中的组件。其中TclientDataSet重点设置的属性为:RemoteServer和ProviderName。
步骤四、进一步完善程序,保存并编译程序。
六、 以TSocketConnection作为客户端应用程序
该种方式使用于局域网和广域网内的通信,但是不能绕过防火墙。
该种方式还需要首先运行服务器端的socket server程序scktsrvr.exe以用于监听连接。
步骤一、建立新项目。
步骤二、加入TSocketConnection组件,设置其address属性为服务器的ip地址,ServerName属性为应用服务器server名,然后置Connected属性为true。
步骤三、加入TclientDataSet组件、DataSource组件、及DataControl中的组件。其中TclientDataSet重点设置的属性为:RemoteServer和ProviderName。
步骤四、进一步完善程序,保存并编译程序。
七、 以TwebConnetion作为客户端应用程序
该种方式使用于局域网和广域网内的通信,且能绕过防火墙。
这种方式要求将httpsrvr.dll文件复制到指定的网页服务器目录中,且设置该目录属性为可执行权限。另外客户端计算机中必须安装wininet.dll文件
步骤一、建立新项目。
步骤二、加入TwebConnetion组件,设置其url属性为服务器的url地址,ServerName属性为应用服务器server名,然后置Connected属性为true。
步骤三、加入TclientDataSet组件、DataSource组件、及DataControl中的组件。其中TclientDataSet重点设置的属性为:RemoteServer和ProviderName。
步骤四、进一步完善程序,保存并编译程序。
八、 以TCORBAConnection作为客户端应用程序
步骤一、建立新项目。
步骤二、加入TCORBAConnection组件,设置其repositoryID属性为服务器的repositoryID,hostName为服务器的ip地址,ServerName属性为应用服务器server名,然后置Connected属性为true。
步骤三、加入TclientDataSet组件、DataSource组件、及DataControl中的组件。其中TclientDataSet重点设置的属性为:RemoteServer和ProviderName。
步骤四、进一步完善程序,保存并编译程序。
王胜海
 
先谢谢 wshaiwshai 提供的资料
TO:叶不归
我觉得 Asp 当然应该调用中间层的业务逻辑拉,否则怎么体现三层的优势
我考虑使用 MTS 就是想充分利用中间层的逻辑,否则就没那么多麻烦了
BTW:好象听说 MIDAS 对数据库事务的支持不是很好,你做过,确实这样吗?
再答多一点,就派送分,我想把这个问题讨论得深入一点,广泛一点,谢谢大家
 
我也想问个问题,我在根据李维的书来修改comobj.pas时,在编译中会出现GetObjectContext
未定义的错误。我是把comobj.pas放在项目的目录下的。
 
多人接受答案了。
 
后退
顶部