C#/.NET 6远程IIS检测正常却触发DCOM 10028错误求助
排查Windows Server 2016上远程IIS检测触发DCOM事件ID 10028错误的方案
可能的原因
- DCOM协议配置不匹配:本地服务使用的协议(比如TCP/IP、命名管道)在远程服务器上未启用,或被防火墙拦截
- 权限缺口:运行Windows服务的账户虽能通过ServerManager获取IIS状态,但底层DCOM调用未获得足够的远程访问权限
- 远程服务器DCOM限制:远程Windows Server 2016的DCOM配置中,未允许本地服务器的IP或服务账户发起通信
- 网络端口部分阻塞:IIS状态获取通道正常,但DCOM底层依赖的135端口或动态端口存在部分不通,导致协议协商失败
解决办法
1. 同步本地与远程的DCOM协议配置
- 两端都打开
dcomcnfg,依次进入「组件服务」→「计算机」→「我的电脑」→右键选择「属性」→切换到「默认协议」标签 - 确保双方都启用相同的核心协议(优先保留TCP/IP),移除不必要的协议;若使用命名管道,需确认远程服务器的网络共享服务正常运行
2. 配置远程服务器的DCOM权限
- 在远程服务器打开
dcomcnfg,找到「我的电脑」→右键「属性」→切换到「COM安全」标签 - 点击「编辑限制」,给运行本地Windows服务的账户添加「远程访问」权限;再进入「编辑默认值」,确保该账户拥有「启动和激活权限」
- 建议使用域账户运行本地服务,避免本地账户跨机器的权限限制
3. 检查防火墙规则
- 远程服务器的Windows防火墙需开放DCOM相关端口:固定的135端口,以及动态端口范围(Windows Server 2016默认是49152-65535)
- 可创建自定义防火墙规则,仅允许本地服务器的IP访问这些端口;也可临时关闭防火墙测试,确认错误是否消失
4. 调整代码中的ServerManager调用逻辑
- 尝试在代码中强制指定DCOM协议,比如调用
ServerManager.OpenRemote前设置环境变量,强制使用TCP/IP:Environment.SetEnvironmentVariable("COM_PROTOCOL", "ncacn_ip_tcp"); using (var serverManager = ServerManager.OpenRemote("remote-server-ip")) { // 你的IIS状态检测逻辑 }
5. 验证远程DCOM连通性
- 在本地服务器打开
dcomcnfg,尝试连接远程服务器的组件服务,确认是否能正常访问 - 使用
ping remote-server、tracert remote-server检查网络连通性,再用telnet remote-server 135测试135端口是否开放
内容的提问来源于stack exchange,提问作者hmlantto
相关产品推荐
相关产品推荐

