如何在不同的机器上运行COM技术编写的小程序
编号:QA003892
建立日期: 2001年2月19日 最后修改日期:2001年2月19日
所属类别:
Trackit:
操作系统:ActiveX and DCOM
编程工具:Visual Basic
问题:我用VB的COM技术编写了一个小程序。这个程序分为服务器端和客户端。都是写成ActiveX EXE,但客户段是可以自己运行的ActiveX EXE。在同一台机器上运行没有任何问题。
我现在想用DCOM把它们做成服务器/客户端的结构。我用的是WIN2000的服务器。WIN98的客户端。现在是我的客户端不可以在服务器上创建ActiveX的服务端。(网络是好的)
请教高手,我应该如何做,才可以把这个程序用服务/客户结构运行。如有源代码更佳。谢谢。
你个人的水平: 中级
回答:
实际上你应该使用DCOM。具体的设置可以参考下面这篇文章:
用VB5.0开发分布式应用
西安奥林岛公司 张吉龙
微软推出的VB5.0是一个功能强大的开发平台,它在"代码重用性"上的加强是一个引人注目的特点。我们可以将需要多次重复使用的功能单元开发成ActiveX组件(ActiveXControl、ActiveX Exe、ActiveX Dll),然后在新程序中像使用VB标准控件及类一样使用这些组件。
Active X组件给开发网络应用带来很大方便。我们可以将这些组件分布在网络的不同机器上,构成分布式应用,就好像所有组件都在同一台机器上一样。很多朋友都有开发本地ActiveX组件的经验,本文将介绍一下如何将ActiveX组件分布在网络上构成分布式应用。
概 述
"Active X"是微软为分布式计算制定的一套标准,它的前身就是大家所熟知的"OLE Automation"。当分布式应用通过网络通信时,Active X可以使用两种不同的机制对客户请求作出响应。一种是称为"分布组件对象模式(DCOM)",它只可以在Windows NT和Windows95上使用;另一种是"远程自动化(Remote Automation)",它可以在16位环境下构造分布式应用。这两种分布式机制都具有着与组件物理位置无关的特点。也就是说,当构造一个Active X组件时,无需知道它将分布在哪台机器上。同样的组件,既可以将它放在本机,也可以将它分布在其它机器上而不需要重新编译。这样,根据网络的性能和网络结构的变化,我们可以方便地调整组件的分布策略。
当然,用Active X构建分布式应用的各个独立组件还具有许多其它优点,如:
S 构造远程组件和构造本地组件的编程方法一模一样,无须特殊的编程经验。
S 可以用Active X组件在服务器端实现复杂的商业规则,比起用DBMS(如SQL Server)来具有更好的编程、维护和排错手段。
S 大量的商业组件可以使用,而且这样的组件会越来越多。我们只需将特殊的商业规则开发成组件,通用的组件则可买来配合使用。
开发和调试
开发分布式组件和开发本地组件相同,调试也可以在本地完成,本文不再赘述(读者可以参看VB5.0所带的例子:\Sample\CliSvr\BookSale\Client\book_cli.vbp,客户端程序;\SampleCliSvr\BookSaleClient\book_svr.vbp,服务器程序)。在开发分布式服务器端组件时,请注意下列问题:
S 服务器端的Project应为Active X EXE(进程外的Active X组件)。这很容易理解,不可能在两台机器上完成同一个进程,所以不可能使用Active X DLL(进程内的组件)。
S 在Project Properties对话框的组件栏目下,应设为Remote Server File。这样,在程序编译时会生成一个VBR文件,在生成安装盘时用到。大家知道,Windows程序在系统注册表中有注册,此文件与注册有关。
S Class属性应设为Mutiuser,以便多个客户应用可以使用它。
生成安装盘
服务器端组件及客户端程序将安装在不同的机器上,应利用Setup Wizard分别生成安装程序。
当生成客户端程序安装盘时,需提供服务器组件所在的机器名(以后可以修改),这将影响客户端机器的注册项,这些注册项告诉客户端程序,到哪里去寻找相应的服务(即服务器端组件提供的服务)。微软提供有工具,来根据需要随时修改这些注册项。如果使用
Remote Automation机制,可使用RemAuto Connection Manager;如使用DCOM机制,可使用DcomConfiguration Manager。RemAuto Connector Manager包含在VB5.0软件包中,在生成安装盘时将自动包括它。Windows NT 4.0 中包含Dcom Configuration Manager,可直接使用。对于Windows 95,需从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.进入"Active X 组件"画面时,按Add Remote按纽指定服务器组件对应的vbr文件(包含服务器组件的Object Id等注册信息)。
3.这时会弹出"Remote Connection Details"对话框。选择使用 Remote automation 或DCOM;输入服务器的机器名。如果使用Remote Automation,还需确定通信协议,如TCP/IP等。验证级别用来保证客户端与服务器间通信的安全性,这是一个较为复杂的问题,为了简化,选择None即可。
4.返回"Active X 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、Windows95、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栏目下指定服务器组件的安装位置。
如果使用Windows95做客户端,应从VB5.0的光盘或从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.同样,应从VB5.0的光盘或从www.microsoft.com找如下两个文件:Dcom95.exe和
Dcm95cfg.exe,安装并重新启动机器。
6.手工改变注册表:HKEY_LOCAL_MACHINE\Software\Microsoft\OLE\Enable Remoteconnection 改为"Y",否则会出现"Run Time Error, Active Component Cannot Be Create "。
7. 和在Windows NT 上一样,运行Dcomcfg.exe并进行配置。
此问题由李海回答。
| |
|
|
| |
|
|