电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> delphi技术>>使用动态链接库:

使用动态链接库

来源:www.cncfan.com | 2006-2-10 | (有2583人读过)

使用动态链接库

开发一个关系数据库应用程序很大程度上依赖于数据库表之间的关系。你经常会发现,用视图描述格式严整的数据比用底层的数据结构更方便。但是由于这些关联,使得更新数据需要一些额外的开销。 1. 单表更新 1 1 1 8 第四部分开发数据库的数据。在那种情况下,D e l p h i目前要求用户自己更新关联查询。以完成同样的功能: 下载在数据库程序设计中进行关联查询的更新是一种特殊情况,在M I D A S中也不例外。问题来源于关联查询自己。尽管一些关联查询能够自动更新数据,但也有一些情况不能自动检索、编辑和更新底层对于只要求更新一个表的关联, D e l p h i能够处理其中大多数细节问题。下面是实现的步骤: 1) 向关联的T Q u e r y中增加字段。 2) 把不想更新的T Q u e r y中每个字段的T F i e l d . P r o v i d e r F l a g s属性都设为[ ]。 3) 在D a t a s e t P r o v i d e r. O n G e t Ta b l e N a m e事件中写入下列代码,告诉M I D A S想更新哪个表。记住, 这个新增的事件很方便指定表名,尽管在Delphi 4中使用D a t a s e t P r o v i d e r. O n G e t D a t a s e t P r o p e r t i e s事件可做完这些, C l i e n t D a t a s e t就知道表名了。当调用C l i e n t D a t a s e t 1 . A p p l y U p d a t e s ( )时,M I D A S会默认采用你指定的表名。不要让M I D A S自己决定表名。一个替代的途径是利用T U p d a t e S Q L组件来更新感兴趣的表。Delphi 5的新增功能允许在调和过程中使用T Q u e r y. U p d a t e O b j e c t,这更接近传统的客户/服务器应用程序。可以在本书附带光盘中\ C o d e \ C h 3 2 \ J o i n 1下找到一个例子程序。 2. 多表更新对于更复杂的情况,像编辑、更新多表,就需要自己来编写代码。解决这个问题有两种方法: . Delphi 4中使用D a t a s e t P r o v i d e r. B e f o r e U p d a t e R e c o r d ( )分离数据包,并更新底层数据库表。 . Delphi 5中使用U p d a t e O b j e c t属性。使用缓存更新多表连接时,需要为每个要更新的表设置一个T U p d a t e S Q L组件。因为U p d a t e O b j e c t 属性只能赋给T U p d a t e S Q L组件,需要把所有T U p d a t e S Q L . D a t a s e t属性链到T Q u e r y. O n U p d a t e R e c o r d中的关联数据集,然后调用T U p d a t e S Q L . A p p l y绑定参数并执行底层的S Q L命令。在我们的例子中,有用的数据集是D e l t a。它作为一个参数传递给T Q u e r y. O n U p d a t e R e c o r d事件。在M I D A S中应用这种技术,第一次使用时表面上看起来很容易。T U p d a t e S Q L . D a t a s e t属性定义为 T B D E D a t a s e t。因为D e l t a数据集是一个T D a t a s e t,所以不能合法赋值。用T U p d a t e S Q L组件可以很好地实现,这比放弃这种方法而使用P r o v i d e r. B e f o r e U p d a t e R e c o r d进行更新要好。我们采用一个T U p d a t e S Q L派生组件。关键是这个组件将D a t a s e t的定义改为T D a t a s e t并静态覆盖S e t P a r a m s以将参数绑定到目标 T D a t a s e t。另外, S e s s i o n N a m e和D a t a b a s e N a m e被显露,以在同一环境中更新。**3 2 - 2中显示了 T Q u e r y. O n U p d a t e R e c o r d事件的代码: **32-2 使用T U p d a t e S Q L的关联 1 1 1 9 因为遵守了M I D A S结构中的数据更新规则,所以调用C l i e n t D a t a s e t 1 . A p p l y U p d a t e s ( 0 )能够无缝地下载执行整个更新过程。注意Delphi 5可以在调和期间使用UpdateObject属性,设想用同样的方法更新多表关联是完全有道理的。但是,在写作本书时,还不能使用这个功能。可以在本书附带光盘中\ C o d e \ C h 3 2 \ J o i n 2下找到一个例子程序。 32.6.2 MIDAS的Web功能 D e l p h i是依赖于Wi n d o w s平台的;因此,用它开发的任何客户程序都必须运行在Wi n d o w s机器上。但有时不期望这样。例如,可能希望任何拥有I n t e r n e t连接的用户能够方便地访问到你的数据库中的数据。因为已经开发了一个服务器应用程序作为访问数据库的代理(另外还有业务规则),所以希望重用这个应用程序而不是在另一个环境下重新编写整个数据访问程序和业务规则。 1. 直接的H T M L 这部分主要介绍怎样利用直接的H T M L提供一个新的表示层来增强应用程序。这里假设你已经熟悉了第3 1章“用We b B r o k e r使应用程序具有I n t e r n e t功能”介绍的内容。用这种方法就在你的系统中又引入了一层。We b B r o k e r作为应用服务器的客户把数据重新包装成H T M L格式,并显示在浏览器中。这将失去使用Delphi IDE的一些好处,比如没有数据感知组件。但是,对于只简单地以H T M L格式访问数据而言,这应该是可行的选择。首先要创建一个We b M o d u l e,然后在这个We b M o d u l e上放置一个T D i s p a t c h C o n n e c t i o n组件和一个 T C l i e n t D a t a s e t组件。设置好属性后,就可以使用许多不同的方法把数据转换成最终客户将会看到的 H T M L。在T C l i e n t D a t a s e t上连接一个T D a t a s e t Ta b l e P r o d u c e r,是一个比较有效的方法。这样,用户可以单击一个链接,打开一个编辑页,然后编辑数据并进行更新。**3 2 - 3和**3 2 - 4显示了这种技术的简单实现。第3 2章M I D A S开发**32-3 用于编辑和更新的H T M L 1 1 2 0 第四部分开发数据库下载**32-4 用于编辑和更新的程序代码第3 2章M I D A S开发1 1 2 1 下载是错误调和。如果大量使用这种技术,那么可以继续扩展这个例子来增强其功能。下载注意,如果使用这种方法,自己要编写大量的代码, M I D A S中没有实现这个例子的功能——特别警告在写We b M o d u l e和应用服务器时,必须要有状态的概念。因为H T T P是无状态的,所以 1 1 2 2 第四部分开发数据库不能依赖于属性值。可以在本书附带光盘中\ C o d e \ C h 3 2 \ We b B r o k下找到一个例子程序。 2. InternetExpress 利用I n t e r n e t E x o r e s s,可以增强We b M o d u l e的功能。这是由于在I n t e r n e t E x p r e s s中使用了像X M L和 J a v a S c r i p t这样的开放标准。使用I n t e r n e t E x p r e s s,可以创建只用于前端浏览M I D A S服务器的应用程序。这种方法不需下载A c t i v e X组件,不需在客户端进行任何安装和配置,只需一个浏览器就够了。要使用I n t e r n e t E x p r e s s,必须在We b服务器上运行一些程序。比如这个例子,我们使用的是I S A P I 应用程序,而你使用的可能是C G I或A S P程序。We b代理的作用就是从浏览器得到请求,然后把这些请求传送给应用服务器。在We b代理应用程序中加入I n t e r n e t E x p r e s s组件可以使这项工作非常容易。这个例子中使用了一个标准的M I D A S应用服务器,有C u s t o m e r s、O r d e r s、E m p l o y e e s。C u s t o m e r s 和O r d e r s被链接到一个嵌套数据集上(关于嵌套数据集,请查看下一节),但E m p l o y e e s数据集是作为一个查找表来使用的。请看附带的定义这个应用服务器的源代码。应用服务器创建并注册后,我们就可以集中精力建立用于与服务器通信的We b代理应用程序了。要创建一个I S A P I应用程序,先选择File | New 菜单命令,然后双击对象库中的Web Server A p p l i c a t i o n。在We b M o d u l e上放置一个T D C M C o n n e c t i o n组件,它将用于连接服务器,因此要用服务器的P r o g I D填写S e r v e r N a m e属性。下一步,从组件面板中的I n t e r n e r E x p r e s s页上选择一个T X M L B r o k e r组件放到We b M o d u l e上,把R e m o t e S e r v e r和P r o v i d e r N a m e属性设为C u s t o m e r P r o v i d e r。T X M L B r o k e r组件和T C l i e n t D a t a s e t的工作方式很相似。它负责从服务器检索数据包然后再把数据送给浏览器。二者数据包之间的主要不同在于,T X M L B r o k e r把M I D A S数据包转换成了X M L格式。我们还要在We b M o d u l e上加入一个T C l i e n t D a t a s e t组件,并把它连到服务器端Employees 的提供者上。 T X M L B r o k e r组件负责与应用服务器通信并浏览H T M L页。有许多属性可以控制I n t e r n e t E x p r e s s应用程序的功能。例如,可以限制传送给客户的记录数,或者指定在一个更新过程中允许出现的错误数。第3 2章M I D A S开发下载现在需要把数据传送到浏览器上。通过T M i d a s P a g e P r o d u c e r组件,可以利用D e l p h i中的We b B r o k e r 技术把一个H T M L页传到浏览器上。但是,利用Web Page Editor,T M i d a s P a g e P r o d u c e r也能够可视化地创建We b页。双击T M i d a s P a g e P r o d u c e r,打开Web Page Editor。这个可视化编辑器能够定义We b页中的任何元素。I n t e r n e t E x p r e s s的一个最大的好处是,它是完全可扩展的。通过一些定义明确的规则,可以自己创建组件并在Web Page Editor中使用。关于自定义I n t e r n e t E x p r e s s组件的例子,请看< D E L P H I > \ D E M O S \ M I D A S \ I N T E R N E T E X P R E S S \ I N E T X C U S TO M目录。警告T M i d a s P a g e P r o d u c e r有一个属性叫做I n c l u d e P a t h U R L。一定要正确设置这个属性,否则I n t e r n e t E x p r e s s应用程序将不能工作。要把它的值设为包含InternetExpress java script文件的虚拟目录。例如,如果把文件放在c : \ i n e t p u b \ w w w r o o t \ j s c r i p t下,那么这个值就是/jscript/。在打开的Web Page Editor中,选择I n s e r t按钮,显示Add We b C o m p o n e n t对话框(见图3 2 - 7 )。这个对话框包含一个We b组件列表, 这些组件可以加到H T M L页中。这个列表依赖于当前选择的父组件 (在左上方)。例如,在根节点增加一个DataForm We b组件,让用户在类似窗体的界面上显示和编辑数据库信息(见图3 2 - 8 )。图32-8 用Web Page Editor设计HTML页如果在Web Page Editor中选择了D a t a F o r m节点,那么可以再次单击I n s e r t按钮。注意这时的组件列表与前一步显示的不同。选择F i e l d G r o u p组件后,会在预览框中看到一个警告信息,告诉你这个F i e l d G r o u p Add Web Component对话框的T X M L B r o k e r属性还没有赋值。在Object Inspector中为X M L B r o k e r赋值后,会马上在Web Page Editor的预览框中看H T M L的布局。在继续修改属性或增加组件过程中,H T M L页的状态也会不断地更新。标准We b组件自定义的能力几乎是无限制的。利用属性可以轻松改变字段的标题、对齐方式和颜色;可以加入简单的H T M L代码;甚至使用风格表。此外,如果组件不适合实际需要,那么总是可以创建派生组件供使用。框架结构是真正可扩展的。 1 1 2 3 图32-7 Web Page Editor中的 1 1 2 4 第四部分开发数据库下载为了调用ISAPI DLL,需要把它放到一个可执行脚本的虚拟目录中。还要把< D E L P H I > \ S O U R C E \ 图32-9 用Internet Explorer访问InternetExpress Web页 W E B M I D A S下的J a v a S c r i p t文件移到We b服务器上一个合理的位置,并修改T M i d a s P a g e P r o d u c e r. I n c l u d e P a t h U R L属性,使它指向J a v a S c r i p t文件的U R L。然后,就可以浏览这个H T M L页了。要浏览这个H T M L页,只需一个支持J a v a S c r i p t的浏览器。在浏览器中输入地址h t t p : / / l o c a l h o s t / i n e t x / i n e t x i s a p i . d l l,数据就会显示在浏览器上(见图3 2 - 9 )。最后,可以在更新过程中检查一下错误调和。把T X M L B r o k o r. R e c o n c i l e P r o d u c e r属性设置为 T P a g e P r o d u c e r,可以实现这一功能。无论什么时候发生错误, T P a g e P r o d u c e r属性的内容都将反馈给最终用户(见图3 2 - 1 0 )。图32-10 由TReconcilePageProducer生成的HTML页第3 2章M I D A S开发1 1 2 5 下载要使用T P a g e P r o d u c e r 、T R e c o n c i l e P a g e P r o d u c e r,还需要专门安装< D E L P H I > \ D E M O S \ M I D A S \ I N T E R N E T E X P R E S S \ I N E T X C U S TO M下的I n e t X C u s t o m . d p k包。P a g e P r o d u c e r生成H T M L的方式很像标准的M I D A S错误调和对话框。可以在本书附带光盘中\ C o d e \ C h 3 2 \ I n e t X下找到一个例子程序。 32.7 客户数据集的更多功能有许多控制T C l i e n t D a t a s e t组件的选项。在这一节中,我们将了解一些使用T C l i e n t D a t a s e t的方式, 使得在复杂的应用程序中能够简化程序设计。 32.7.1 嵌套的数据集前面从较高的层次介绍了嵌套的数据集,现在让我们更加详细地进行了解。要设置嵌套数据集的关系,必须在服务器端定义主/细关系。这和在传统的客户/服务器应用程序中使用的方法相同—即, 为细T Q u e r y定义S Q L语句,包括链接参数。下面是一个例子: 然后,为细T Q u e r y的T Q u e r y. D a t a s o u r c e赋值,使它指向一个捆绑到主T D a t a s e t的T D a t a s o u r c e。设置完它们之间的关系后,只需要输出捆绑到主数据集上的T D a t a s e t P r o v i d e r就可以了。M I D A S知道主数据集上链接了细数据集,因此会把细数据集传送到客户的T D a t a s e t F i e l d。在客户端,把主T C l i e n t D a t a s e t . P r o v i d e r N a m e属性设置为主提供者。然后,向T C l i e n t D a t a s e t中增加字段。注意字段编辑器中的最后一个字段,它与服务器上的细数据集同名,并定义为T D a t a s e t F i e l d 类型。这样,在程序中就有足够的信息可以使用。但是,要想使事情更加容易,可以增加一个细 T C l i e n t D a t a s e t,并用主数据集中适当的T D a t a s e t F i l e d为D a t a s e t F i e l d属性赋值。一定要注意,这里没有设置细T C l i e n t D a t a s e t的任何其他属性,像R e m o t e S e r v e r、P r o v i d e r N a m e、M a s t e r S o u r c e、M a s t e r F i e l d s 或P a c k e t R e c o r d s等,仅设置了D a t a s e t F i e l d属性。现在,还可以在细T C l i e n t D a t a s e t上绑定数据感知组件。完成了嵌套数据集的设置后,需要应用更新操作返回给数据库。这是通过调用主T C l i e n t D a t a s e t的 A p p l y U p d a t e s方法实现的。M I D A S将在一个事务中应用主T C l i e n t D a t a s e t上的所有改变(包括细数据集), 返回给数据库。可以在本书附带光盘中\ C o d e \ C h 3 2 \ N e s t C D S下找到一个例子程序。 32.7.2 客户主/细连接前面在使用数据集时曾经介绍过回调。使用嵌套数据集的可选办法是在客户端建立主/细关系。为了建立主/细链接,要为服务器上为主细创建一个T D a t a s e t和T D a t a s e t P r o v i d e r。在客户端,为服务器输出的数据集绑定两个T C l i e n t D a t a s e t组件。然后,把细T C l i e n t D a t a s e t的 M a s t e r S o u r c e属性设置为指向主T C l i e n t D a t a s e t的T D a t a s o u r c e组件。把T C l i e n t D a t a s e t的P a c k e t R e c o r d s属性设为0来设置M a s t e r S o u r c e。P a c k e t R e c o r d s等于0意味着 M I D A S只返回元数据给T C l i e n t D a t a s e t。但是,在一个主/细关系中,如果P a c k e t R e c o r d s等于0,它的含义就变了,M I D A S会为每个主记录检索细记录。总之,要把P a c k e t R e c o r d s属性设为缺省值。为了在一个会话中调和返回数据库的主/细数据,必须编写自己的A p p l y U p d a t e s逻辑。这不像 D e l p h i中的大多数工作那样简单,但是它可以灵活地控制更新过程。调用T C l i e n t D a t a s e t . A p p l y U p d a t e s通常可以更新单表。这种方法先把修改过的记录从C l i e n t D a t a s e t 传送到中间层的提供者上,提供者再去更新数据库。所有这些都在一个事务中完成并无需程序员干涉。要在主/细表中实现相同的操作,必须理解调用T C l i e n t D a t a s e t . A p p l y U p d a t e s时D e l p h i都做了些什么。对T C l i e n t D a t a s e t的任何改变都存储在D e l t a属性中。D e l t a属性包含了最终要提交给数据库的所有下载信息。下面的代码说明了用D e l t a属性更新数据库的过程。**3 2 - 5和**3 2 - 6显示了更新主/细表时客警告Delphi 5的最初版本有一个缺陷,导致在一个会话中不能用多个D e l t a更新数据库。如果可以在本书附带光盘中\ C o d e \ C h 3 2 \ M D C D S下找到一个例子程序。 1 1 2 6 第四部分开发数据库户端和服务器端的相关代码。想用这种技术,可以用下面的方法替换DBTABLES.PAS。**32-5 更新主/细表的客户端代码**32-6 更新主/细表的服务器端代码第3 2章M I D A S开发1 1 2 7 下载尽管这种方法非常好用,但它不支持代码重用。概括起来更新过程的主要步骤如下: 1) 在变体数组中为每个C D S赋D e l t a。 2) 在变体数组中为每个C D S赋提供者。 3) 在一个事务中应用全部D e l t a。 4) 调和上一步返回的错误数据包并刷新数据。概括的结果如**3 2 - 7所示。**32-7 工具例程单元 1 1 2 8 第四部分开发数据库下载第3 2章M I D A S开发1 1 2 9 下载 1 1 3 0 第四部分开发数据库下载**3 2 - 8显示了用C D S U t i l . p a s重做上一个例子的代码。 32.7.3 两层应用程序你已经知道了在三层应用程序中怎样设置提供者、数据和C l i e n t D a t a s e t。然而,在两层应用程序中有很多情况也需要这样。那么,在两层应用程序中怎样实现呢?有四种可能性: . 运行时设置数据。 . 设计时设置数据。 . 运行时设置提供者。 . 设计时设置提供者。使用C l i e n t D a t a s e t的两个基本选择是设置A p p S e r v e r属性和设置数据。如果选择设置A p p S e r v e r,那么就在T D a t a s e t P r o v i d e r和C l i e n t D a t a s e t之间建立了一个链接,通过它可以在C l i e n t D a t a s e t和 T D a t a s e t P r o v i d e r之间进行通信。反之,如果选择设置数据,那么就建立了一个高效的本地存储机制来保存数据,而不需与T D a t a s e t P r o v i d e r组件进行更多的通信。**3 2 - 9显示了运行时直接设置数据的代码。**32-8 用C D S U t i l . p a s重做上一个例子可以在两层或三层应用程序中使用这个单元。从两层应用程序迁移到三层应用程序,要导出服务器上的函数C D S A p p l y U p d a t e s,用它替换客户端的C D S A p p l y U p d a t e s。客户端的其他东西保持不变。**32-9 从T D a t a s e t直接设置数据的代码第3 2章M I D A S开发1 1 3 1 者。因此,必须在运行时在程序中设置TClientDataset.AppServer属性。下载这种方法需要的代码和努力比D e l p h i以前的版本要多,那时只需简单地把C l i e n t D a t a s e t 1 . D a t a属性设置为Ta b l e 1 . P r o v i d e r. D a t a属性就可以了。但是,显然这个函数可以减少额外的代码。在设计时,也可以使用T C l i e n t D a t a s e t从T D a t a s e t中检索数据,这需要在T C l i e n t D a t a s e t组件的上下文菜单中选择Assign Local Data 命令。然后,指定T D a t a s e t组件要包含的数据,数据就会检索到 T C l i e n t D a t a s e t并存储在D a t a属性中。警告如果这时保存文件,把这个DFM文件和执行命令前相比较,会发现它的大小增加了。这是因为D e l p h i在这个D F M文件中保存了所有相关的元数据和记录。如果打开T C l i e n t D a t a s e t, D e l p h i只会输出这些数据到D F M。执行T C l i e n t D a t a s e t上下文菜单中的Clear Data命令,可以整理空间。如果希望使用提供者,必须设置A p p S e r v e r属性。运行时可以在程序中设置A p p S e r v e r属性,就像下面的代码这样简单: 最后,还可以在设计时设置A p p S e r v e r属性。如果T C l i e n t D a t a s e t的R e m o t e S e r v e r属性设为空,那么可以把一个T D a t a s e t P r o v i d e r赋给T C l i e n t D a t a s e t . P r o v i d e r N a m e属性。 T D a t a s e t组件和C l i e n t D a t a s e t的主要不同是,使用C l i e n t D a t a s e t时,是利用I A p p S e r v e r接口来代理对底层T D a t a s e t组件的请求。这意味着要操纵T C l i e n t D a t a s e t的属性、方法、事件和字段,而不是 T D a t a s e t的。假如T D a t a s e t是在一个单独的应用程序中,就不能在程序中直接操纵它了。最好把所有的 “服务器”组件放在一个单独的D a t a M o d u l e中。把T D a t a b a s e、T D a t a s e t和T C D S P r o v i d e r组件放在一个单独的D a t a M o d u l e中,可以使应用程序更容易转移到以后的多层开发上。注意TClientDataset.ProviderName属性在设计时不能设置为另一个窗体或DataModule中的提供 32.8 部署MIDAS应用程序现在已经建立了一个完整的M I D A S应用程序,最后的工作就是部署应用程序。这部分将概要介绍部署应用程序都需要做些什么。 1. 许可发行从M I D A S第一次在Delphi 3中推出开始,对于许多人来说许可一直是一项艰苦的工作。无数的配置选项可能会造成混淆。这部分将详细全面地介绍出售许可时的要求。许可捆绑的唯一的法律文档是 D E P L O Y. T X T,它在Delphi 5目录下。对于涉及版权的具体问题,需要与本地的B o r l a n d销售商联系。要了解更多的信息请访问下面的地址h t t p : / / w w w. b o r l a n d . c o m / m i d a s / p a p e r s / l i c e n s i n g /或我们的网站h t t p : / / w w w. x a p w a r e . c o m / d d g。从那里得到的信息可以回答使用M I D A S时会遇到的一些普遍问题,包括价格信息。 M I D A S数据包是否在机器间传送,是决定M I D A S许可的必要性的主要标准。如果是,那么必须下载 1 1 3 2 第四部分开发数据库有许可。如果不是,尽管使用了M I D A S技术,也不需要许可。 2. DCOM配置 D C O M配置看起来既艺术又科学。要完整可靠地配置D C O M,可以有许多方面,但这部分只介绍一些基本的技术。注册完服务器后,就可以用M i c r o s o f t的工具软件D C O M C N F G来配置服务器对象了。N T系统自动包含这个工具,但Windows 9x机器要单独下载。需要注意,在D C O M C N F G中有大量的缺陷;最需要注意的是D C O M C N F G只能运行在用户级访问控制的Windows 9x机器上。当然,必须要一个域。这在点对点网络中可能就不行,比如只有两台Windows 9x机器。这让许多人错误地认为只有N T机器才能运行D C O M。如果运行了D C O M C N F G,可以选择已注册的应用服务器,单击P r o p e r t i e s按钮显示服务器的配置信息。在我们对D C O M C N F G的简要介绍中,I d e n t i t y页是一个很好的起点。对于已注册的服务器对象, 缺省的设置是Launching User。当D C O M创建服务器时,使用用户在I d e n t i t y页指定的安全环境。Launching User为每个不同的登录用户每次产生一个新的进程。许多人知道这种情况,他们选择了c i M u l t i p l e实例模式,却还是惊讶于创建了多个服务器副本。例如,如果用户A连接到服务器,然后用户B也连接到服务器, D C O M会为用户B生成一个新进程。另外,与服务器上的当前用户不同,以其他帐号登录的用户看不到服务器的G U I 部分。这是由于N T被看成Wi n d o w s工作站。只有Interactive User才能在Wi n d o w s工作站上看到服务器的G U I部分。这也就是当前登录到服务器上的用户。总之,不要用Launching User选项设置I d e n t i t y。这页中的下一个选项是Interactive User。这意味着每个单独的客户创建一个服务器并工作在自己的环境中。这样用户可以与应用服务器进行可视化的交互。不幸的是,多数系统管理员不允许登录后空闲在N T服务器上。另外,如果登录用户决定退出,应用服务器可能并不像你期望的那样工作。针对这个讨论,这里建议使用最后一个可用的选项: This User。使用这个设置,所有客户创建一个服务器并使用登录证书和用户在I d e n t i t y页中设置的环境。这也意味着N T服务器不要求用户登录使用应用服务器。有一点不好的地方是,使用这个选项没有服务器的G U I界面。但是,它是到目前为止所有选项中最好的一个。完成了服务器对象在I d e n t i t y页的正确配置后,需要把注意力转移到S e c u r i t y页上来。应该确保运行这个对象的用户被赋予了适当的权利。也要保证向S Y S T E M用户授予访问服务器的权利;否则将会遇到错误。在D C O M配置过程中有许多细微的差别。关于D C O M最后的配置发行,尤其是有关Windows 9x、 D e l p h i和M I D A S的内容,请访问我们的网站中的D C O M主页: http: //www.DistribuCon. com/dcom95.htm 3. 部署文件 D e l p h i的每个新版本对于部署M I D A S应用程序的要求都有变化。Delphi 5比任何一个版本都容易部署。D e l p h i以前的版本在客户和服务器上都要部署D B C L I E N T. D L L文件。这个文件是用来实现 T C l i e n t D a t a s e t的。D B C L I E N T. D L L还要注册在客户的系统中。其他文件也有一些要求,例如 S T D V C L 3 2 . D L L、S T D V C L 4 0 . D L L和I D P R O V 3 2 . D L L。如果文件丢失或注册不正确,应用程序就不能正常运行。在Delphi 5中,部署M I D A S应用程序只需要最少的一部分文件,如下面所列: 1) 把应用服务器拷贝到有足够N T F S权限的目录下。 2) 安装数据访问层,使应用服务器能够作为客户访问R D B M S (如B D E、M D A C、客户端数据库的库文件,等等)。 3) 拷贝M I D A S . D L L文件到% S Y S T E M%目录。缺省情况下, N T机器上是C : \ Wi n n t \ S y s t e m 3 2,第3 2章M I D A S开发1 1 3 3 下载 Windows 9x机器上是C : \ Wi n d o w s \ S y s t e m。 4) 运行应用服务器一次,注册成C O M。下面是客户端的步骤: 1) 拷贝客户到一个目录下,连同客户需要的任何其他外部支持文件(如运行包、D L L文件、 A c t i v e X控件,等等)。 2) 拷贝M I D A S . D L L文件到%S Y S T E M%目录下。 3) (可选的)如果在T D i s p a t c h C o n n e c t i o n中指定了S e r v e r N a m e属性或在客户端进行静态捆绑,那么需要注册服务器的库文件类型( T L B )。这可以用< D E L P H I > \ B I N \ T R E G S V R . E X E这样的工具来实现(或者在程序中实现)。 4. 进行I n t e r n e t部署要考虑的事项如果通过局域网进行部署,就没有什么需要考虑的。可以选择任何一种适合应用程序需要的连接类型。但是,如果用I n t e r n e t作为网络主干,那么就会有许多出问题的可能—即,防火墙。 D C O M不是最配合防火墙的协议。它需要在一个防火墙中打开多个端口。多数系统管理员厌烦这种情况,因为这可能引来黑客攻击。防火墙只需要打开一个端口。但是,在一些特殊场合,管理员甚至会拒绝那样做,因为这是一个安全漏洞。 T We b C o n n e c t i o n是从T S o c k e t C o n n e c t i o n派生来的,它允许把M I D A S传输捆绑进合法的H T T P中, 使用世界上最开放的端口—H T T P端口(缺省为8 0 )。事实上,这个组件甚至支持S S L,因此可以进行可靠的通信。这样,防火墙问题就完全消除了。利用B o r l a n d提供的I S A P I扩展,可以把H T T P传输加到M I D A S传输中去,反之亦然。从这一点来看,I S A P I . D L L与S c k t S r v r完成同样的套接字连接工作。I S A P I扩展h t t p s r v r. d l l需要放在一个能够执行程序的目录下。例如,对于I I S 4,缺省的位置是C : \ I n e t p u b \ S c r i p t s。使用T We b C o n n e c t i o n的一个更大的优点是,它支持对象共享。对象共享可以减少每次客户连接时服务器的总开销。此外, M I D A S中的共享机制允许设置创建对象的数目最大。当达到最大数目后,会返回客户一个错误信息,显示服务器太忙。这比为每个要连接服务器的客户创建任意数目的线程更具有灵活性。为了让M I D A S知道要共享R D M,必须在R D M的U p d a t e R e g i s t r y方法中调用R e g i s t e r P o o l e d和 U n r e g i s t e r P o o l e d (请看**3 2 - 1显示的U p d a t e R e g i s t r y的一个简单实现)。下面的代码是调用R e g i s t e r- P o o l e d方法的例子: 这行代码告诉M I D A S要共享1 6个对象,M I D A S可以在对象不活动3 0分钟后释放创建的对象实例。如果不想释放对象,可以把超时参数设为0。客户不需要做太大的改变。只要在客户端使用一个T We b C o n n e c t i o n组件并适当地设置属性,客户就会通过H T T P与服务器进行通信。使用T We b C o n n e c t i o n后的主要不同是,必须指定到h t t p s r v r. d l l的完整U R L,不要使用主机名或地址来标识服务器。图3 2 - 11显示了使用T We b C o n n e c t i o n的典型设置。图32-11 设计时TWebConnection的设置 1 1 3 4 第四部分开发数据库载平衡和容错。关于集群的更详细的信息,请访问地址: 下载使用H T T P的另一个好处是,像N T企业版这样的操作系统允许集群服务器。这样实现了真正的负使用T We b C o n n e c t i o n的限制极少,为了能让更多的客户访问服务器,这些限制是非常值得的。这里的限制就是必须在客户端安装w i n i n e t . d l l,并且不能使用回调。另外,必须在被覆盖的U p d a t e R e g i s t r y 方法中使用E n a b l e We b Tr a n s p o r t函数来注册应用服务器。 32.9 总结本章已介绍了很多M I D A S的内容。尽管如此,对于我们能用这种技术做些什么,现在还只停留在表面上—有些更深的内容超出了一章所能涵盖的范围。即使了解了M I D A S的所有细节,在C + + B u i l d e r 和J B u i l d e r中使用M I D A S技术,仍然能够增加你的知识和能力。使用在这里所学到的技术和概念,你可以达到跨平台访问服务器的最高水平。 M I D A S是一门发展迅速的技术,它为每个程序员带来了多层应用程序开发的希望。一旦了解了 M I D A S开发应用程序的能力,你可能就不会再回到传统的数据库应用程序开发上了。
上一篇获取硬盘ID
下一篇情人节的来历
delphi技术热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号