基于Socket连接下的MIDAS编程技术应用的详细介绍

基于Socket连接下的MIDAS编程技术应用的详细介绍

摘要 本文介绍了多层体系结构下的MIDAS编程技术的概念及其在Delphi中的几种编程方法,重点讨论了Socket连接下的MIDAS编程技术,并以电力部门可靠性管理系统为实例进行详细说明。
关键词 Socket SocketConnection组件 MIDAS
 
1 引言
随着企业与信息技术的发展,大型数据处理系统应用越来越广泛,以往的C/S模式下的数据库应用程序已经不能适应企业发展的需求,以多层体系结构为基础数据库应用程序很好的实现了集中化的商业逻辑(即封装了商业规则)及“瘦”客户机数据库应用程序和实现了分布式数据处理,满足了现代化企业的要求。目前多层体系结构主要是三层体系结构,下面就将讨论在三层体系结构下,采用Socket连接下的MIDAS编程技术在DELPHI中的研究与具体应用。
2 MIDAS技术概述
MIDAS是多层体系结构的关键技术。MIDAS数据库应用程序结构分为三部分:客户机数据库应用程序、数据交换服务器和远程数据库服务器。
在客户机数据库应用程序中,它通过数据库交换服务器提供的IAppServer接口获得数据和更新数据。
数据库交换服务器的关键部件是远程数据模块,它提供了IAppServer接口,当客户机数据库应用程序与数据库交换服务器建立了连接,就通过IAppServer接口访问数据。
基于MIDAS的多层体系结构如图1所示:
基于Socket连接下的MIDAS编程技术应用的详细介绍
图1 MIDAS结构图
3 多种连接方式的MIDAS编程简介
在Delphi编程中,我可以利用MIDAS构建强大的多层分布式数据库系统,MIDAS提供了多种的客户程序和中间层的连接方式,如:Sockect,DCOM,MTS ,Corba等,下面简单的介绍一下这几种连结方式。
Socket是最容易配置的连接方式。而且Socket只使用一个端口来进行通讯,这样我们在防火墙的系统中,管理员会更乐意接受Socket因为配置通过防火墙的Dcom是相对麻烦的事情。在安装中间层的机器上,只要运行SCKTSRVR.EXE就可以和客户端建立Socket的连接。
DCOM 提供了核心的NTLM的安全性和验证机制。在DCOM里面我们可以很轻松地使用早联编(early-binding)、 回调机制(callback)和连结点机制(ConnectionPoints)。 但是它的不利因素就是配置客户端的DCOM和让DCOM透过防火墙(FireWall)相当麻烦。
MTS能够为分布式的系统提供数据库连结池、事务支持,便于分发等优点,在它基础之上的COM+(Windows2000提供了这个服务)组合了COM和MTS的功能。MTS的缺点就是对处理使用BDE的多用户应用的事务处理支持很弱。
CORBA是一个跨平台的开放式标准(特别是在很多的JAVA应用中,因为他们都是跨平台的产品),通过VisiBroker(很著名的ORB系统),配置比DCOM更方便。CORBA本身的负载平衡、命名服务和事件服务可以让开发者构建更稳定和扩展性强的分布式系统。
4 Socket连接下的MIDAS编程
在Delphi中,对Socket连接下的MIDAS编程主要是使用SocketConnection组件。SocketConnection组件使用Windows套接字(Socket)管理与数据交换服务器的连接。SocketConnection用于多层体系结构数据库应用程序的客户端,管理和维护客户机与数据库交换服务器之间的链接。SocketConnection组件具有如下功能:
(1) 建立与数据库交换服务器的连接
(2) 从数据交换服务器获取IAppServer接口
(3) 调用COM对象对消息进行编码和译码
(4) 从数据交换服务器获取DataSetProvider组件列表
(5) 断开与数据库交换服务器的链接
一旦通过SocketConnection组件建立了与数据交换服务器的链接,客户端的ClientDataSet组件将通过IAppServer接口使用TCP/IP协议与数据交换服务器进行通信。SocketConnection组件使用链接的主要属性和功能如下表1:
表1 SocketConnection组件使用链接的主要属性和功能
属 性
功 能
Address
指定数据库交换服务器所处计算机在网络中的IP地址
Host
指定数据交换服务器所处的主机名
Port
指定数据交换服务器所处的计算机调度Socket使用的端口号
InterceptGUID
指定COM对象的GUID
通过SocketConnection组件进行MIDAS编程的程序主要可分为2个部分,即建立数据库交换服务器和客户机数据库应用程序。
4.1建立数据库交换服务器
数据库交换服务器的建立包括3步:
(1) 建立数据库交换主窗体,步骤略。
(2) 创建远程数据模块。如下图2所示:
基于Socket连接下的MIDAS编程技术应用的详细介绍
图2 Remote Data Module Wizard
在我们所创建的远程数据模块中,还需要添加相应的DataSetProvider组件和数据集组件(如Table、query等),使数据集组件连接到数据库,将DataSetProvider组件的DataSet属性设置为相应的数据集组件名。
(3)运行数据库交换服务器,在注册表中进行注册。
4.2建立客户端应用程序
(1) 建立客户机的主窗体,步骤略。
(2) 往客户机窗体上添加ClientDataSet组件和SocketConnection组件。使用SocketConnection组件连接相应的数据库交换服务器,再通过ClientDataSet组件的RemoteServer属性连接SocketConnection组件名访问和操作相应的数据库服务器中的数据。
5 Socket连接下的MIDAS编程的应用实例
下面以湖北省电力公司开发的《可靠性管理系统》软件中的数据上报功能对Socket连接下的MIDAS编程进行详细的说明。《可靠性管理系统》是电力部门各级单位共同使用的分析供电可靠性的分析管理软件。通常上级部门需要大量的数据都直接来源于下级单位,那么下级单位如何将一段时间的数据方便及时的传到上级部门,考虑到省电力局及其下属单位之间有光纤连接的局域网,我们采用MIDAS编程,使下属单位可以直接通过客户端连接上级单位的数据库交换服务器,很方便的实现数据上报功能。因为建立数据库交换服务器和建立客户端应用程序的原理同上,下面仅给出怎样通过客户端应用程序连接上级数据库交换服务器并实现数据上报的主要源代码:
(1) 连接远程数据库交换服务器
soc1.Address:=Edt_Host.Text; //指定数据交换服务器所处计算机在网络中的IP地址
soc1.Port := strtoint(edt_port.text); //指定数据交换服务器所处的计算机调度socket使用的端口号
soc1.ServerName:='SKKX.Kkx_RemoteDataModule_comm';//指定数据库交换器服务器名
try
soc1.Connected; //与数据库交换服务器进行连接
except //连接失败
showmessage('连接失败!');
…………安全性处理…………
end;//连接成功
cds_2.RemoteServer:=soc1; //连接成功后,再将ClientDataSet连接到MIDAS连接组件
cds_2.ProviderName:='PQ_comm2';//指定数据交换服务器中的DataSetProvider组件
(2) 从把本地数据库服务器的内容写入远程数据库服务器
CDS_1.first;//从源数据库的第一条记录开始
with CDS_1 DO
while not eof do
begin
………利用CDS_1控件读取本地数据库数据并进行相应处理…………
if CDS_2.IsEmpty then //添加记录
begin
CDS_2.append;//使目的数据库的数据集组件处于写状态
for i:=0 to CDS_2.FieldCount-1 do
CDS_2.fields[i].asstring:=CDS_1.fields[i].asstring; //逐个字段写入数据
CDS_2.post;//提交到内存,为将数据提交到目的数据库做准备
CDS_2.edit; //是数据集组件处于编辑状态,以便实现真正的数据提交
CDS_2.ApplyUpdates(-1);//真正提交到目的数据库中
end;
CDS_1.next; //循环指向源数据库的下一条记录
end
6 结束语
Socket连接下的MIDAS编程技术有效的解决了客户端应用程序的负担,许多工作都可以交给数据库交换服务器完成,实现了真正“瘦”客户机应用程序;并且能够通过客户端应用程序很容易的访问异地数据库,实现了不同数据库服务器之间交换信息的简单化、透明化,在当今的大型企业的信息管理系统中具有很高的使用价值。
参考文献:
[1] 王欣 左春 企业级数据复制平台的构建方案[J] 《计算机工程与应用》2003 第3期 P198-P200
[2]Delphi 5 数据库编程 新智工作室 电子工业出版社 2001年9月第1版 P243-P246 P314-P321
[3]http://www.chinabyte.com/20010622/186485.shtml多层结构连接方式选择的分析2001-06-22 天极论坛
[4]肖飞 周静 李三得: MapXtreme在WebGIS多层应用结构模型的应用[J] 《计算机与信息技术》2004年第3期p56-p57