症状:
我们有时在系统事件中会遇到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服务。有几种情形造成这种情况的出现:
解决方法:
正如上文所提到的, 引起DCOM 10009出现有着很多可能性,我们 需要针对不同的情形来做不同的处理:
情形1:
如果远端的服务器是处于维护阶段, DCOM 10009的出现是正常的,我们可以通过ping <远端服务器>来确认远端服务器状态。
情形2:
如果远端服务器是处在online的状态却仍然出现DCOM 10009的话,请执行以下步骤:
如果所有的动态端口都在被使用了,或者只有很少可用,可以考虑扩展动态端口。
关于如何配置与防火墙一起使用的 RPC 动态端口分配请参考:http://support.microsoft.com/?id=154596
关于DCOM端口范围配置问题请参考:http://support.microsoft.com/kb/217351/en-us
关于如何使用DTCPing工具来解决MS DTC中的连接问题请参考:
http://support.microsoft.com/kb/918331/en-us
注意:DTCPing工具并非专门指用来解决MSDTC问题的,这个工具可以用来解决所有DCOM通信问题。