You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:17:19