如何解决 DCOM 的 Visual Basic 客户端/服务器应用程序

文章翻译 文章翻译
文章编号: 269330 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文介绍了您可以解决最常见的错误时您尝试通过使用分布式组件对象模型 (DCOM) 实例化远程服务器对象,您会遇到的一些需要执行的各种步骤。在 Visual Basic 中是最常见的错误消息:
运行时错误 70: 权限被拒绝。
运行时错误 429: ActiveX 组件不能创建对象。
运行时错误 462: 远程服务器计算机不存在或不可用。

更多信息

要开始疑难解答

当您要实例化一个 COM 时,就会出现该问题的大多数对象在远程计算机上通过 DCOM 与 Dcomcnfg 或网络问题中的设置不正确。问题很少与该代码。

要做的第一件事就是要记下与您的环境和应用程序本身,如相关的信息:
  1. 有关在服务器计算机:

    在服务器计算机是服务器应用程序即将运行的计算机。收集以下数据:
    • 操作系统和安装的服务包。
    • 是否有人登录到计算机?
    • 如果登录是有人他们的权限是什么?他们是否在管理员组的一部分吗?是否他们作为登录域用户吗?
  2. 有关客户端计算机中:

    客户端计算机是在客户端应用程序即将运行的计算机。收集以下数据:
    • 操作系统和安装的服务包。
    • 谁登录到这台计算机?是否它们作为域用户或身份登录本地用户吗?如果作为域用户登录他们在服务器计算机上的权限是什么?他们是否在服务器计算机上管理员组的一部分吗?
  3. 有关服务器应用程序:
    • 使用的语言、 版本,和服务包的开发服务器?
    • 不会它回调到客户端吗?
    • 它不会引发事件吗?如果是这样,DCOM 安全设置在客户端计算机上为访问权限授予 所有人 帐户吗?
    • 它有一个用户界面?
    • 它被标记为 无人参与执行 吗?
    • 它设置安全参数的函数,如 CoInitializeSecurityCoSetProxyBlanket 调用通过以编程方式吗?
  4. 有关客户端应用程序:
    • 使用的语言、 版本,和服务包已开发的应用程序?
    • 它设置安全参数的函数,如 CoInitializeSecurityCoSetProxyBlanket 调用通过以编程方式吗?
  5. 有关网络:
    • 是否在客户端和服务器计算机上同一局域网 (LAN)?
    • 是否在客户端和服务器计算机连接了 Internet 防火墙和它们之间的代理服务器没有通过?
    • 是否在客户端和服务器计算机连接通过互联网使用防火墙和它们之间的代理服务器吗?

基本疑难解答

  1. 检查所有 Dcomcnfg 中的设置合适,基于您在前面收集的数据。
    268550如何为 Visual Basic DCOM 客户端/服务器应用程序使用 Dcomcnfg
  2. 如果您使用 Microsoft Windows 95 客户端或服务器计算机上,请确保您具有在其上安装 DCOM95。您可以从下面的 Microsoft 网站下载 DCOM95:
    http://www.microsoft.com/com/dcom/dcom95/download.asp
  3. 如果您在服务器计算机上使用 Windows 95、 Microsoft Windows 98、 Windows Millennium 版 (Me),您将需要对您尝试使用客户端之前运行该服务器组件。作为一种检查验证服务器正在运行并且它正在等待客户端连接。
    165101如何使用 Windows 95、 Windows 98 或 Windows Me 为 DCOM 服务器
  4. 如果客户端和服务器计算机通过防火墙和它们之间的代理服务器与 Internet 连接,DCOM 无法正常工作,如果没有任何类型的地址转换 (NAT) 在它们之间。如果没有地址转换您需要配置这些代理和防火墙以启用 DCOM 通信。您可以找到几个与 Microsoft 开发人员网络 (MSDN) 或在下面的 Microsoft 网站此主题有关的白皮书:
    http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/cnet/cnad_arc_wbak.mspx?mfr=true
    此主题不介绍本文中的内容。

其他疑难解答

如果设置为根据您的环境和应用程序功能的权限设置的 Dcomcnfg 后仍有问题,下面是几个步骤,您可能需要解决您的问题:
  1. 使用任务管理器来验证服务器未运行时使用 Dcomcnfg 设置中进行更改。因此如果服务器正在运行时更改设置,新设置仅生效的下次启动时服务器启动时,所有设置都分配给进程。
  2. 验证的服务器和客户端上正确运行在同一台计算机。您应始终测试您的客户端和服务器运行的正确本地 ; 也就是在同一计算机上远程运行之前。
  3. 检查是否都面临的问题实际上是通常与代码本身,一个 DCOM 问题,或如果它是特定于您的应用程序的编码问题。通过使用只是一种或两个非常简单的方法创建一个非常简单的客户端/服务器应用程序来执行此操作。按照正常的过程的打包和安装。如果您的服务器引发的事件,然后在小示例也应引发事件。 有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    266717如何使用 Visual Basic 创建 DCOM 客户端/服务器应用程序
    267836如何使用 Visual Basic 事件与创建 DCOM 客户端/服务器
    理想情况下,您应使用上述文章原则是,因为它们带您逐步通过从头最终打包和部署。在您使用的为您的应用程序和查看这是否正常工作,请使用相同的设置。如果您的问题与 DCOM 相关,您面临着同样的问题对小示例应用程序中一样。直到您找到问题的保留故障排除较小的示例问题。 如果小应用程序工作正常但您自己的应用程序不能使用相同的设置,则您可以将面临两个问题:
    • 您的代码中的某些内容就创建问题。例如对于如果在您的代码和您的服务器的身份访问的数据库不具有执行此操作的权限。如果您试图访问的文件或其他对象进行实例化同样的问题,就会发生这种情况。
    • 您的代码很好,但在该注册表如到您的服务器的多个条目中有一些问题。 有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
      180525PRB: Dcomcnfg 报告 DCOM 服务器的多个副本
    • 客户端计算机指向错误的服务器计算机。请检查该位置中选项卡 Dcomcnfg 在客户端计算机上。有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
      268550如何为 Visual Basic DCOM 客户端/服务器应用程序使用 Dcomcnfg
  4. 请验证您具有打包并安装客户端和服务器正确。正确地创建分发程序包是成功的安装基础。有关如何创建 DCOM 客户端/服务器应用程序使用 Visual Basic 分步示例的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    266717如何使用 Visual Basic 创建 DCOM 客户端/服务器应用程序
    267836如何使用 Visual Basic 事件与创建 DCOM 客户端/服务器
  5. 验证您的网络正常工作,由客户端从服务器计算机和服务器从客户端计算机执行 ping 操作。在服务器上打开一个命令提示符窗口,然后执行下面的命令前面 ClientcomputerName 应在客户端计算机的名称:
    Ping ClientcomputerName
    如果一切工作正常,您应该看到三个或四个答复,在每个时间。如果您看到超时或其他错误,您的网络设置过程中遇到问题,您需要在继续之前,请修复这些。重复使用服务器的计算机名称在客户端计算机上相同的步骤。
  6. 在客户端计算机上的 Dcomcnfg,更改通过该服务器的名称替换为服务器的 IP 地址的服务器的位置。如果它工作正常使用的 IP 地址而不是与服务器的计算机名称,然后多个可能必须与您的网络设置的问题。
  7. 请尝试重新启动服务器和客户端。有时某些设置缓存在内存和 $ 重新启动后在 Dcomcnfg 中进行更改后,问题解决了。
  8. 在 Windows 95 或 Windows 98,使用 $ TCP/IP 协议。若要执行此操作删除 Dcomcnfg 中的默认协议列表中的所有其他协议。
  9. 通常,如果 DCOM 问题您得到错误当您试图通过调用 CreateObject 函数或设置对象变量,用 New 关键字实例化远程对象。能够区分如果您收到一条错误消息,由于在创建该对象本身,或者是由于在对象的初始化事件在做什么重要的。如果您试图实例化的对象的初始化事件没有任何的代码,那么毫无疑问您收到该错误与对象的实例化相关。 如果您然而,在初始化事件中的连接到数据库或其他的对象进行实例化的代码应包括内部 Initialize 事件捕获错误,并引发自定义用户错误。如果您不补漏白您内部 Initialize 事件的错误,并且会产生错误,它冒泡出到客户端,并可能将您相混淆。您可能会认为问题在于对象创建时存在的问题是在初始化代码的实际事件。
  10. 如果服务器运行在 Microsoft Windows NT 4 或 Microsoft Windows 2000 中,您可以使用事件查看器以了解有关 DCOM 连接失败的原因的其他审核信息。但是,记录这些类型的事件是通常不启用默认情况下。您需要设置审核选项以启用它。

    在 Windows NT 4 中启用这些选项,如下所示:

    • 开始 菜单上选择 程序,选择 管理工具,然后选择 用户管理器
    • 如果运行的 NT 4 服务器您必须选择一个域 ; 在这种情况下 用户 菜单上选择 选项,然后选择本地计算机。
    • 策略 菜单上选择 审核 选项。启用审核的成功和失败的前三个项: 登录/注销、 文件和对象访问使用的用户权限。 单击 确定 并关闭用户管理器。

    在 Windows 2000 中启用这些选项,如下所示:

    • 开始 菜单上选择 程序,选择 管理工具,然后选择 本地安全策略
    • 在左边的窗格中,您将看到一个树视图。单击加号 (+) 号左边的 本地策略,您看到 审核策略 项。选择 审核策略 项,请注意在右窗格包含一个已启用哪些,其中一个不是哪些的所有审核选项。右键单击在下列任一选项使您可以启用或禁用它们。
    • 启用审核成功和失败的以下选项: 审核登录事件、 审核对象访问、 审核特权使用。
    • 关闭 本地安全策略 窗口。

    一旦激活这些日志记录选项再次测试您的客户端。您收到错误消息后,使用事件查看器查看是否存在任何 DCOM 事件。该事件可能会告诉您原因,访问被拒绝。此外,它可以告诉您谁已登录到客户端计算机上,如果这是一个域用户或本地用户。它可以告诉您客户端请求的协议不是服务器,等上可用。通常,COM 日志被添加到系统日志中。
  11. 如果您的服务器有多个类和这些类的某些工作,并且其他人不要,检查 Dcomcnfg 中在客户端计算机上的每个类条目。默认状态下,每个类都有其自己的 AppID,并因此,自己设置以便可以正确设置了一些您的类和其他人并不是。 有关客户端的应用程序列表中定位您的服务器的其他信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    268550如何为 Visual Basic DCOM 客户端/服务器应用程序使用 Dcomcnfg

运行时错误 70: 拒绝

此错误通常与安全设置。此错误是一个比较好的提示方法调用到达目标计算机,所以网络连接可能不是问题在此处。下面是要检查的几个事项:
  • 如果将身份验证级别设置为 连接,验证域用户,而不是本地用户以登录用户登录到客户端计算机。
  • 如果将身份验证级别设置为 连接,验证在服务器计算机实际上属于域。 如果独立的计算机它无法验证该用户,除非您在客户端和服务器计算机上有一个匹配的用户名称/密码。
  • 如果将身份验证级别设置为 ,则检查如果您已设置为客户端和服务器计算机上无此选项。
  • 如果您设置为 身份验证级别,并且您已经验证两台计算机有正确的此设置确保客户端和服务器应用程序都不设置以编程方式使用功能,如 CoInitializeSecurityCoSetProxyBlanket 身份验证。以编程方式设置身份验证将覆盖从 Dcomcnfg 该注册表项。
  • 如果您将身份验证级别设置为 ,并且您有非域用户选中如果您在权限包括"每个人"(或"的 World"的 Windows 95 和 Windows 98),并启动权限。
  • 检查所的访问权限和 $ 启动 Dcomcnfg 中的权限,并验证用户登录到客户端计算机上显式包含在这些列表,或属于一个组包含用户。
  • 本文中稍后介绍,请参见"已知问题以检查"。有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    216051FIX: Dcomcnfg NT 4.0 SP4 做不写下 HKCR\APPID.Exe 文件名

运行时错误 429: ActiveX 组件无法创建对象

以下是可能导致此错误的几个事项:
  • 服务器未正确安装在服务器计算机上。在服务器计算机上运行 Dcomcnfg,选择服务器应用程序在列表上的应用程序,然后单击 属性。在 位置 选项卡中验证选中唯一选项是 在这台计算机上的运行应用程序
  • 重新编译二进制的兼容性而服务器并没有重新编译客户端。客户端可能寻找旧类 id。即使您重新编译客户端,您可能在注册表、 旧的和新的多个条目。有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    180525PRB: Dcomcnfg 报告 DCOM 服务器的多个副本
  • 您可能在错误的服务器名称中使用位置选项卡。 例如对于计算机 ServerA 上, 并由于某种原因该位置中 Dcomcnfg 定义为上安装服务器。在客户端计算机上运行 Dcomcnfg,找到该服务器上的应用程序,列表然后单击 属性。选择 位置 选项卡,然后验证服务器计算机名正确。如果您找不到您的服务器应用程序的列表中查找以下 Microsoft 知识库文章中的"定位您的服务器在客户端应用程序列表":
    268550如何为 Visual Basic DCOM 客户端/服务器应用程序使用 Dcomcnfg
  • 请参阅"已知问题以检查"本文中稍后介绍。有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    193143错误: DCOM 客户端挂起,和然后授予错误信息 429

错误 462: 远程服务器计算机不存在或不可用

以下是一些导致此错误消息的原因:
  • 您可能在错误的服务器名称中使用位置选项卡。 例如对于 ServerA,在计算机上安装服务器由于某种原因您定义位置中 Dcomcnfg 为上,和上不是有效的计算机。在客户端计算机上运行 Dcomcnfg,找到该服务器上的应用程序,列表然后单击 属性 按钮。选择 位置 选项卡,然后验证服务器计算机名正确。如果您找不到您的服务器列表中的应用程序,请参阅下列 Microsoft 知识库文章中的"定位您的服务器在客户端应用程序列表":
    268550如何为 Visual Basic DCOM 客户端/服务器应用程序使用 Dcomcnfg
  • ping 服务器从客户端,并验证它是可到达。此外 ping 客户端从服务器查看它是否可以访问。ping 的名称和 IP 地址。请参阅本文的项在"其他故障排除"部分中的 5。
  • 您的服务器正在运行 Windows 95、 Windows 98 或 Windows Me 计算机上并没有运行在服务器等待客户端连接,或 RPCSS.EXE 未处于运行状态。有关本主题的详细信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    165101如何使用 Windows 95 或 Windows 98,为 DCOM 服务器
  • 您的计算机有多个网卡。有关本主题的详细信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    183930FIX: IP 出错多宿主计算机上使用 UDP 时
  • 请参见本文"已知问题以检查"一节。
  • 在服务器计算机未处于运行状态,或仍处于其重新启动状态。

服务器挂起

如果您的服务器没有一个验证您选中 无人参与执行 选项的用户界面。如果不选中此选项,可以的正在,例如一个消息框显示您的服务器将无法捕获的错误。如果您的服务器运行的不与标识 交互式用户,没有人可以看到该消息框,服务器只需等待有人要消除这种情况发生,从不框。通过 无人参与执行 选项消息框会重定向到一个日志文件。

安装后的客户端崩溃

有关本主题的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
185193PRB: Clireg32 无法注册类型库的 DCOM 服务器
221173PRB: 安装 VB6 做未更新的 Clireg32.exe

要检查的已知的问题

下面是可能会影响您的安装的已知问题的列表。这些记录在 Microsoft 知识的其他基本文章。此处提供了他们的文章 id。如果您仍然有问题与 DCOM 应用程序查看这篇文章和已知问题的列表中,故障排除步骤后,确保搜索不能包含本文中的其他文章的知识库。
  1. 下面的错误消息会影响用 Visual Basic 6.0 初始版本,Service Pack 1 之前创建的服务器应用程序。
    193143DCOM 客户端挂起和次要授予错误信息 429
  2. 下面的问题是在 Service Pack 4 附带的 NT 4.0 和服务包 6 中固定为 NT 4.0 的 Dcomcnfg 中引入的。 但是,即使您已经有固定的版本附带 SP6 但您的服务器安装之前您安装了 SP6,您可能仍然遇到此问题。问题在于 Dcomcnfg 未包括在 Hkey_Classes_Root\AppID 下的一个所需的注册表项。在 HKCR\AppID 是服务器的映射到其 AppID 的可执行文件的密钥。如果您的服务器的可执行文件是 MyServer.exe,例如对于也必须有一个 HKCR\AppID 下具有此名称的密钥。在此项值之一,应包含您的服务器的 AppID GUID 的 AppID。有关如何手动添加缺少的项,请参阅下列 Microsoft 知识库文章中的说明。
    216051Dcomcnfg NT 4.0 SP4 不会写入下 HKCR\APPID.Exe 名称
    此错误的后果是系统将忽略您为此服务器在 Dcomcnfg 中定义的所有自定义项。如果您定义的用户有权访问和启动您的服务器的一个列表,并且此列表包括用户 1,但仍遇到错误 70 的示例为"拒绝访问"用户 1 在试图连接到您的服务器时,很可能是您遇到此问题。例如对于,另一个的问题是服务器的如果您定义在您的是服务器的交互式的用户的身份,但服务器将继续像它具有标识启动用户-这是服务器的默认值。
  3. 在使用 Visual Basic 5.0 Clireg32.exe 附带时出现错误。结果是在客户端崩溃安装后。与 Visual Basic 6.0 中传送的 Clireg32 版本具有固定,此 bug,但如果您在安装 Visual Basic 6.0 中时必须在计算机上的旧版本安装过程不会更新该文件,因此您可能必须在旧版本。

    Clireg32.exe 是一种实用工具,它在客户端计算机中注册 VBR 和 TLB 文件。当您为客户机创建一个分发包,并自动添加一个 VBR 文件打包和部署向导 (PDW) Clireg32.exe 向您的分发包。如果您的开发计算机有坏的 clireg32.exe 版本您可能会分发将与您的应用程序不正确的版本。如果在目标计算机还没有较新版本,该错误的版本是正在使用的。将版本与随 Visual Basic 5.0 提供问题是 5.00.3716,日期为 1/16/1997年 12: 00。
    185193无法注册类型库的 DCOM 服务器 Clireg32
    221173安装 VB6 无法更新 Clireg32.exe
  4. 多个网卡的计算机上使用 DCOM 时,以下 bug 可能会导致问题。一个可能的错误消息为:
    462 远程服务器计算机不可用。
    若要不必这一问题使这台计算机上的协议的列表上的仅 TCP/IP。在 NT4 SP4 中,此问题被固定。
    183930IP 多宿主计算机上使用 UDP 时出错
  5. 当 Windows NT 的计算机上的 COM 客户端无法通过身份验证的标识下运行在远程计算机上时, 由客户端启动的 COM 服务器会关闭大约六个以分钟为单位)。
    175020远程 COM 服务器六分钟后关闭

属性

文章编号: 269330 - 最后修改: 2007年1月31日 - 修订: 2.5
这篇文章中的信息适用于:
  • Microsoft Visual Basic 5.0 企业版
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
关键字:?
kbmt kbdcom kbhowto KB269330 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 269330
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com