如何解决系统事件出现DCOM 10009错误?
症状:
我们有时在系统事件中会遇到DCOM 10009的错误(如下所示),或者会在DCOM客户应用程序中接收到错误代码0x800706ba:
Event Type: Error
Event Source: DCOM|
Event Category: None
Event ID: 10009
Date: 2010-2-22
Time: 10:02:07
User: N/A
Computer: <Computer Name>
Description:
DCOM was unable to communicate with the computer <Target Computer Name> using any of the configured protocols.
Simply speaking, DCOM 10009 indicates that the DCOM client located on this <Computer Name> can't communicate with the DCOM|COM+ server located on that <Target Computer Name>.
发生过程:
当用户调用CoGetClassObject或者CoCreateInstance(CreateObject或者在VB中 new)来启用一个组件的时候, COM runtime会联系它的本地SCM COM的启用者(PRCSS服务),登陆相应的提供这个组件的COM服务器。
如果这个组件是远端的,本地的RPCSS服务会把请求传输给远端机器上的RPCSS服务。
但是如果远端服务器的RPCSS服务不可用的话,DCOM 10009会出现并通知管理员,调用栈内容如下所示:
ChildEBP RetAddr
006df364 757f8b72 ADVAPI32!ReportEventW-> then DCOM 10009 is logged.
006df3a0 757f6542 rpcss!LogRemoteSideUnavailable+0x63 ->here we don't found the server.
006df40c 757f6781 rpcss!CRemoteMachine::Activate+0x294
006df648 757f6861 rpcss!RemoteActivationCall+0xf2
006df664 757edb5c rpcss!ActivateRemote+0x8e
006df6c0 757d629c rpcss!Activation+0x343
006df718 757d7680 rpcss!ActivateFromProperties+0x1c2
006df724 757d76c0 rpcss!CScmActivator::CreateInstance+0xd
...
...
发生原因:
概括说来,发生DCOM 10009错误的原因在于:本地RPCSS服务不能连接到远端目的服务器的RPCSS服务。有几种情形造成这种情况的出现:
- 1. 远端的目的服务器可能出于offline的状态,例如可能是在维护。
- 2. 双方服务器都出于online的状态,但是在两个服务器的PRC通信出现问题,例如服务器名称解析失败,可提供RPC通信的端口资源耗尽,防火墙配置等等。
解决方法:
正如上文所提到的, 引起DCOM 10009出现有着很多可能性,我们 需要针对不同的情形来做不同的处理:
情形1:
如果远端的服务器是处于维护阶段, DCOM 10009的出现是正常的,我们可以通过ping <远端服务器>来确认远端服务器状态。
情形2:
如果远端服务器是处在online的状态却仍然出现DCOM 10009的话,请执行以下步骤:
- 1. Ping<远端服务器>和IP地址来确认网络状况良好。
- 2. Telnet<远端服务器>135以确认Port 135没有被防火墙阻止。
- 3. 如果已经配置过PRC通信的动态端口, 可以通过以下命令来两个服务器的端口资源:Netstat -anb
如果所有的动态端口都在被使用了,或者只有很少可用,可以考虑扩展动态端口。
关于如何配置与防火墙一起使用的 RPC 动态端口分配请参考:http://support.microsoft.com/?id=154596
关于DCOM端口范围配置问题请参考:http://support.microsoft.com/kb/217351/en-us
- 4. 如果以上步骤都正常, 可以使用DTCPing工具来确认两个服务器之间的DCOM通信是否正常。
关于如何使用DTCPing工具来解决MS DTC中的连接问题请参考:
http://support.microsoft.com/kb/918331/en-us
注意:DTCPing工具并非专门指用来解决MSDTC问题的,这个工具可以用来解决所有DCOM通信问题。