微软推出的VB是一个功能强大的开发平台。它在“代码重用性”上地加强是一个引人注目的特点。我们可以将需要多次重复使用的功能单元开发成activex组件(activex control,activex exe,activex dll),然后在新程序中象使用vb标准控件及类一样使用这些组件。 activex组件给开发网络应用带来很大方便。我们可以将这些组件分布在网络的不同机器上,构成分布式应用,就好象所有组件都在同一台机器上一样。很多朋友都有开发本地activex组件的经验,本文将结合实例介绍一下如何将activex组件分布在网络上构成分布式应用。
一、概述
“activex"是微软为分布式计算制定的一套标准,它的前身就是大家所熟知的“ole automation"。当分布式应用通过网络通讯时,activex可以使用两种不同的机制对客户请求作出响应。一种称为“分布组件对象模式(dcom)”,只可以在windows nt和windows 95上使用;另一种是“远程自动化(remote automation)",它可以在16位环境下构造分布式应用。
这两种分布式机制,有着极其引人的特点:与组件物理位置的无关性。也就是说,当你构造一个activex组件时,无需知道它将分布在那一台机器上。同样的组件,即可以将它放在本机,也可以将它分布在其它机器上而不需要从新编译。这样,根据网络的性能和网络结构的变化,我们可以方便的调整组件的分布策略。
当然,用activex构建分布式应用的各个独立组件,还有其它优点:
构造远程组件和构造本地组件的编程方法一模一样,无须特殊的工程经验。可以用activex组件在服务器端实现复杂的商业规则。比起用dbms(如sql server)来完成同样的工作,我们有更好地编程、维护、排错手段。
有大量的商业组件可以使用。而且这样的组件会越来越多。我们只需将特殊的商业规则开发成组件,与购买的组件配合使用。
二、开发和调试
开发分布式组件和开发本地组件相同,调试也可以在本地完成,本文不在赘述。(可以参看VB所带的例子:\sample\clisvr\booksale\client\book_cli.vbp客户端程序;\sample\clisvr\booksale\client\book_svr.vbp服务器程序。)在开发分布式服务器段组件时,请注意下列问题:
服务器端的project应为activex exe(进程外的activex组件)。这也很容易理解,不可能在两台机器上完成同一个进程,所以,不可能使用activex dll(进程内的组件)。
在project properties对话框的组件栏目下,应设为remote server file。这样,在程序编译时会生成一个vbr文件,在生成安装盘时要用。大家知道,windows程序在系统注册表中有注册,此文件与注册有关。
class属性应设为mutiuse,以便多个客户应用可以使用它。
三、生成安装盘
服务器端组件及客户端程序将安装在不同的机器上,应利用setup wizard分别生成安装程序。
当生成客户端程序安装盘时,需提供服务器组件所在的机器名(以后可以修改),这将影响客户端机器的注册项,这些注册项告诉客户端程序,到那里去寻找相应的服务(即服务器端组件提供的服务)。微软提供了工具,可以根据需要随时修改这些注册项。如果使用remote automation机制,可使用remauto connection manager;如使用dcom机制,可使用dcom configuration manager。remauto connector manager在VB软件包中即有,在生成安装盘时将自动包括它。windows nt 4.0中包含dcom configuration manager,可直接使用。对于windows95,需从www.microsoft.com下载dcom95.exe及dcom95cfg.exe并运行,可得到dcom configuration manager(注意要重新启动机器)。
利用上述工具,可实现如下功能:
1.可以随时切换服务器组件是在本地还是远程。这样可以方便的在本机调试远程组件。
2.可随时改变服务器组件的安装位置。
如何生成服务器端安装程序:
1.使用setup wizard,按要求指明project文件所在的路径,并指明“产生安装程序”。
2.在进入“share active application”画面时,选择“安装为一个共享组件”。如果你准备使用remote automation,在画面下方选择“yes";如使用dcom,选择“no”。如果使用remote automation,remauto connection manager(racmgr32.exe)、remote automation manager(autmgr32.exe)将自动包含在安装程序内。
如何生成客户端安装程序:
1.使用setup wizard,按要求指明project文件所在的路径,并指明“产生安装程序”。
2.进入“activex组件”画面时,按add remote按纽指定服务器组件对应的vbr文件(包含服务器组件的object id等注册信息)。
3.这时,会弹出“remote connection details”对话框。选择使用remote automation或dcom;输入服务器的机器名。如果使用remote automation,还需确定通讯协议,如tcp/ip等。验证级别用来保证客户端与服务器间通讯的安全性。这是一个较为复杂的问题,为了简化期间,选择none即可。
4.返回“activex server components”画面。如果你的程序使用多个远程组件,可逐一加入。相关的本地组件,可按“add local”一一加入。注意,系统缺省会将一些组件当作本地组件,不要将同一组件即当作远程组件,又当作本地组件。
四、安装与使用
windows nt 4.0支持dcom,可直接安装dcom分布式应用。对于windows 95,需要安装附加程序,以支持dcom分布式应用。但,windows 95可直接安装remote automation应用。
remote automation模式:
分别在服务器及客户端机器上安装相应程序。在服务器端,要先启动automation manager(autmgr32.exe,安装程序会自动将该文件拷到系统目录下),客户端才可建立连接。这种模式对操作系统要求较低,windows 3.1,windows 95,windows nt等均可做服务器或客户端。
本方法提供的安全性较差,无法限制那些用户可以连接或不可以连接。不过,系统还是提供了许多安全管理措施。读者在学习时不妨做简化处理:
在服务器端启动remote automation connection manager(racmgr32.exe),在左侧选相应的server组件,在右侧client access栏目下,选择allow all remote creates。
关于客户端的安装,我们前面作过讨论。利用remote automation connection manager(racmgr32.exe),在server connection栏目下,我们可以随时调整服务器组件的分布位置。
remote automation这种模式提供了很大的灵活性,在安全性要求不高的场合,可以使用该模式。
dcom模式:
要构造dcom应用,服务器端最好使用windows nt server或windows nt workstation,客户端可使用windows nt或windows95。这也符合实际应用的策略,server component要求有较高的可靠性,一般分布在专用服务器上。 在服务器组件安装完毕后,要确定rpc service是启动的。在客户端能够建立连接之前,还需要配置访问权限。
为了简单期间,你可以这样做:
1.运行dcomcfg.exe(在系统目录下)。
2.选择相应组件,设置其properties。
3.在location栏目下,设为:run app on this computer;在security栏目下,选择定制安全性,并将权限给everyone full control。
在客户端的机器上,通过dcomcfg.exe,在location栏目下,可以指定服务器组件的安装位置。 在windows 95下构建dcom应用的特殊考虑:
如果使用windows 95做客户端,应从VB的光盘或从www.microsoft.com找如下两个文件:dcom95.exe,dcm95cfg.exe。安装并重新启动机器即可。
如server端使用windows 95,须考虑下列问题:
1.安全性将受到限制。
2.应手工在startup中加进server组件的启动程序。
3.运行rpcss.exe后,客户端才可建立连接。
4.由于server component是一个class,当没有客户程序参照它时,它会自动终止。可是,windows 95没有自动启动它的机制。所以,要保证server component不会从内存卸载。办法是:在server component中加入一个form,visible为false。程序从form启动。
5.应从VB的光盘或从www.microsoft.com找如下两个文件:dcom95.exe,dcm95cfg.exe。安装并重新启动机器。
6.手工改变注册表:hkey_local_machine\software\microsoft\ole\enable remote connection改为“y"。否则,会出现“run time error,active component cannot be create”
7.如同在windows nt上一样,运行dcomcfg.exe并进行配置。 |