本文介绍如何使用 Visual Basic 创建、打包和部署分布式组件对象模型(DCOM)客户端/服务器应用程序。
原始产品版本: Visual Basic
原始 KB 数: 266717
总结
本文介绍如何使用 Visual Basic 创建、打包和部署 DCOM 客户端/服务器应用程序。 若要创建 DCOM 客户端/服务器应用程序,需要 Visual Basic 企业版。 Microsoft假定读者已经熟悉创建在同一台计算机上运行的客户端/服务器应用程序。
详细信息
无需更改代码,使客户端应用程序能够使用 DCOM 实例化远程服务器。 区别在于打包和部署客户端的方式。 此外,在安装客户端和服务器后,还需要进行一些安全设置。 可以使用名为 Dcomcnfg 的实用工具进行这些设置。
以下步骤演示如何分发和配置客户端/服务器应用程序。 将服务器 命名为DCOMDemo_Svr,并将客户端 命名为DCOMDemo_Cli。 为每个文件夹创建一个单独的文件夹。 在本文中,请调用这些文件夹 c:\DCOMDemo\Server and c:\DCOMDemo\Client。
创建服务器
启动新的 Visual Basic 项目。 在 “新建项目 ”对话框中,选择 ActiveX EXE,然后单击“ 打开”。 类 1 默认创建。
将以下代码添加到 Class1 模块:
Public Function ServerTime() As String ServerTime = Time End Function在 “项目 ”菜单上,单击“ 项目属性 ”选项,然后选择“ 常规 ”选项卡。
在“ 项目名称 ”字段中,键入 DCOMDemo_Svr。
在“ 项目说明 ”字段中,键入 DCOMDemo_Svr - 服务器。 选中“无人参与的执行”选项。
注意
此选项应始终签入没有任何 UI 的服务器,以确保服务器运行时不会显示任何类型的对话框。 如果在服务器在不是交互式用户的标识下运行时具有任何类型的用户交互,则服务器可能显示为挂起。
选择“组件”选项卡,并选中“远程服务器文件”选项。
注意
选中此选项会使 Visual Basic 编译器生成打包使用此服务器的客户端应用程序所需的 VBR 和 TLB 文件。 这些文件包含需要包含在客户端计算机上的注册表项。
关闭“项目属性”对话框。
在“文件”菜单上,选择“另存为”,然后将此项目保存到 。
c:\DCOMDemo\Server folder在 “文件 ”菜单上,选择“ 创建DCOMDemo_Svr 并编译服务器。
在 “项目 ”菜单上,选择“ 项目属性 ”选项,然后选择“ 组件 ”选项卡。
在“组件”选项卡上,选择“版本兼容性”,选择“二进制兼容性”选项,然后将项目二进制文件与创建的服务器的可执行文件(DCOMDemo_Svr.exe)兼容。 通过选择此选项,可以确保重新编译服务器时,所有 GUID 都保持不变。
创建客户端
在 “文件 ”菜单上,选择“ 新建项目 ”选项,选择 “标准 EXE”,然后单击“ 确定”。 Form1 默认创建。
在 “项目 ”菜单上,单击“ 项目属性 ”选项,然后选择“ 常规 ”选项卡。
在“ 项目名称 ”字段中,键入 DCOMDemo_Cli。
在“ 项目说明 ”字段中,键入 DCOMDemo_Cli Project - Client。
在 “项目 ”菜单上,选择“ 引用”。 从可用引用 列表中选择DCOMDemo_Svr - 服务器。
将命令按钮放在 Form1 上,并将按钮的标题更改为 “运行”。
将以下代码置于按钮的单击事件中:
Dim MyObj As DCOMDemo_Svr.Class1 On Error GoTo err1 Set MyObj = CreateObject("DCOMDemo_Svr.Class1") MsgBox "Server Time=" & MyObj.ServerTime & " Client Time=" & Time Exit Sub err1: MsgBox "Connection failed: Error " & Err.Number & " - " & Err.Description在 “文件 ”菜单上,选择“ 另存为”,然后将项目保存到客户端的文件夹
c:\DCOMDemo\Client。按 F5 键在 IDE 中运行客户端并对其进行测试。
在 “文件 ”菜单上,选择“ 创建DCOMDemo_Cli 以编译客户端,然后关闭 Visual Basic。
打包服务器
使用包和部署向导按往常打包服务器进行分发。 服务器由使用 DCOM 的远程客户端实例化。 在为服务器创建包时,你将获得一个对话框,询问此服务器是否将用作远程自动化服务器,以及是否要包含用于此目的的支持文件。 只需单击“ 否 ”按钮,因为 DCOM 不是远程自动化。 远程自动化是一种由 DCOM 取代的较旧技术。
打包客户端
打包客户端时,需要执行一些特定的步骤,考虑到服务器不会在客户端所在的同一台计算机上运行。 对客户端包所做的更改可确保仅安装类型库(.tlb 文件),并且包含一些附加的注册表项,而不是服务器的可执行文件,这是客户端计算机上不需要的,因为它不会在那里运行。
使用以下步骤打包客户端:
启动 包和部署向导,然后选择客户端的项目。
单击“包”按钮。 在 “包类型 ”对话框中,选择“ 标准安装包”,然后单击“ 下一步”。
在 “包文件夹 ”对话框中,选择要存储包的文件夹,然后单击“ 下一步”。 在本例中,它是 c:\DCOMDemo\Client\Package。
注意
你可能会收到一个对话框,指出服务器没有依赖项信息。 单击“确定”,因为此服务器没有任何依赖项。
现在应位于“包含的文件”对话框中。
取消选择服务器的可执行文件,DCOMDemo_Svr.exe,因为不想分发服务器的可执行文件,然后单击“添加”按钮。
将“类型文件”组合框更改为“远程服务器文件”(*.vbr)。
指向具有服务器项目的文件夹(在本例
c:\DCOMDemo\Server中),并选择相关的 VBR 文件, DCOMDemo_Svr.VBR。 单击“ 打开”,“ 添加文件 ”对话框将关闭。注意
这两个文件包括 DCOMDemo_Svr.VBR 和 DCOMDemo_Svr.TLB。 单击“下一步”按钮。 在 “远程服务器 ”对话框中,可以定义运行服务器的计算机(Net Address)的名称。 通常将此字段留空,因为你可能事先不知道服务器将安装在哪里。 如果将其留空,则安装客户端时会提示你输入它。 对于此示例,请将其留空。
单击“下一步”继续。 现在可以继续执行包和部署向导的标准过程。 在这种情况下,只需单击“下一步”即可查看所有剩余对话框。
安装服务器
使用之前创建的分发包,在要运行它的计算机上安装服务器。 如果要使用开发计算机运行服务器,则无需安装它,因为 Visual Basic 在编译服务器时会为你注册。
安装客户端
使用之前创建的分发包,在要在其中运行客户端的计算机上安装客户端。 由于此客户端使用 DCOM 服务器,在创建分发包时将服务器的实际位置留空,因此现在需要提供此位置。 当安装程序提示你输入此位置时,请提供安装服务器的计算机的名称。
设置服务器的安全性
如果在 Windows NT 或 Windows 2000 计算机上安装了服务器,则需要为其配置安全性。 使用 Dcomcnfg 执行此操作,如以下步骤所示,该步骤假定客户端和服务器计算机都是域的一部分,并且登录到客户端计算机的用户将作为域用户登录。 建议的设置只是一种可能的配置。 它们是通用的,可广泛访问服务器。 请记住,这只是一个示例。 部署实际应用程序时,安全对于环境而言是一个考虑因素,应选择更严格的选项。 此外,如果用于测试此示例服务器的计算机用于运行其他服务器,请在进行以下更改之前记下当前设置,并在测试完成后立即返回到原始设置。
- 在服务器计算机上,单击“ 开始 ”按钮,然后选择“ 运行”。 在 “运行 ”对话框中,键入 Dcomcnfg,然后单击“ 确定”。 你需要具有管理员权限才能运行 Dcomcnfg。
- 选择“默认属性”选项卡,并验证是否选中了此计算机上的“启用分布式 COM”。
- 将默认身份验证级别设置为“连接”,并将默认模拟级别设置为“标识”。
- 选择“默认安全”选项卡。
- 单击“默认访问权限”面板中的“编辑默认”按钮。
- 使用“允许访问权限”验证列表中是否包含“每个人和系统”。 如果没有,可以使用“ 添加 ”按钮将它们添加到列表中。 在列表完成时单击“ 确定 ”。
- 单击“默认启动权限”面板中的“编辑默认”按钮。
- 使用“允许启动”权限验证列表中是否包含“每个人和系统”。 如果没有,请使用“ 添加 ”按钮将它们添加到列表中。 在列表完成时单击“ 确定 ”。
- 选择“应用程序”选项卡,突出显示服务器,DCOMDemo_Svr.Class1,然后单击“属性”按钮。
- 选择 “常规 ”选项卡,将 “身份验证级别 ”设置为 “默认”,然后选择“ 位置 ”选项卡。检查的唯一选项应该是在此计算机上运行应用程序。
- 选择“安全”选项卡并验证“使用默认访问权限”和“使用默认启动权限”选项是否已选中。
- 选择“标识”选项卡,选中启动用户选项,单击“确定”以关闭“服务器的属性”对话框,然后单击“确定”以关闭 Dcomcnfg。 可以看到,测试服务器使用所有默认设置。 部署自己的服务器时,应定义特定于应用程序的设置。 所有自定义设置都优先于默认设置。
现已准备好测试服务器。 在客户端计算机上,启动客户端,然后单击“运行”按钮。 应会看到一个指示服务器时间的消息框。 如果无法成功测试此示例,请参阅“引用”部分中列出的故障排除文章Q269330。