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

微软补丁致基于Utgard的Java OPC DA客户端无法添加订阅组求助

微软DCOM安全补丁导致Utgard Java OPC客户端连接故障解决方案

问题背景

近期微软发布的DCOM安全加固补丁将系统默认身份验证级别提升至数据包完整性级别,导致使用Utgard Java OPC库对接OPC DA服务器的业务系统出现通信故障:Utgard底层依赖Jinterop COM库完成DCOM交互,补丁安装后客户端可正常建立基础连接,但在创建订阅组、监听OPC服务器数据变化的环节执行失败,经验证只需将Jinterop的身份验证级别配置为DEFAULT即可解决该问题。

故障场景代码示例

JISession session = JISession.createSession(ipAddress,userName,password);
JIComServer  comServer = new JIComServer(JIClassId.valueOf(classId), address, session);
IJIComObject instance = comServer.createInstance();
IJIComObject opcServer = new OPCServer(instance);
// 后续创建访问基础组并添加到服务器、绑定回调处理程序时执行失败

报错信息

抛出异常中文说明:RPC服务器不可用。请检查COM服务器是否正常运行,到COM服务器的网络是否连通(可通过ping服务器主机验证),同时确认Windows防火墙未拦截DCOM访问,错误码为0x800706BA。
异常堆栈如下:

at org.jinterop.dcom.core.JIComServer.call(JIComServer.java:1004) 
at org.jinterop.dcom.core.JIComServer.call(JIComServer.java:951) 
at org.jinterop.dcom.core.JIComObjectImpl.call(JIComObjectImpl.java:293) 
at org.jinterop.dcom.core.JIComObjectImpl.call(JIComObjectImpl.java:159) 
at org.jinterop.dcom.core.JIFrameworkHelper.attachEventHandler(JIFrameworkHelper.java:285) 
at org.openscada.opc.dcom.da.impl.OPCGroupStateMgt.attach(OPCGroupStateMgt.java:179)

解决思路

  • 全局配置Jinterop身份验证级别:在创建JISession实例前添加全局配置代码,指定DCOM身份验证级别为默认值即可适配补丁后的安全要求
import org.jinterop.dcom.common.JISystem;
import org.jinterop.dcom.common.JIInternalSystem;

// 全局设置DCOM身份验证级别
JISystem.setDefaultAuthenticationLevel(JIInternalSystem.RPC_C_AUTHN_LEVEL_DEFAULT);
  • 会话级单独配置:如果全局配置不生效,可在创建JISession后单独为当前会话设置身份验证级别
JISession session = JISession.createSession(ipAddress,userName,password);
// 为当前会话单独设置身份验证级别
session.setAuthenticationLevel(JIInternalSystem.RPC_C_AUTHN_LEVEL_DEFAULT);
  • 服务端兜底方案:若调整客户端配置仍无法解决问题,可登录OPC服务端所在Windows主机,打开DCOM配置面板,将默认身份验证级别调整为“连接”级别,修改后无需重启主机即可生效。

内容的提问来源于stack exchange,提问作者Murthy Manchala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:07