1- 0x00000005
user access deny,用户校验不通过: 这个问题检查了一天,首先确认用户名密码没错,检查了一遍DCOM配置,也没有问题, 接下来陷入了困境, 后来查了些资料,顺着用户校验不通过这条线索, 查看Windows系统日志,如下:
安全日志中记录用户登录行为, OPC通信需要使用Windows系统用户进行登录, 如果用户名密码错误这里会有相关记录.
而我这里是"审核成功"的, 排除用户名密码问题;
又陷入了困境, 后来考虑既然有登录日志,会不会有别的日志呢, 按照这个想法我查看了"Windows日志"模块下的其他日志,于是抱着试试看的态度发现了"系统"日志下有一条记录:
“服务器端身份验证级别策略不允许用户 %1\%2 SID (%3) 地址 %4 激活 DCOM 服务器。 请至少将激活身份验证级别提高到客户端应用程序中的RPC_C_AUTHN_LEVEL_PKT_INTEGRITY。”
日志编码: 10036
这条日志出现在我每次OPC客户端运行之后, 有很强关联性, 于是顺着这条线索重新百度.下面是针对这个问题比较好的一个资料(虽然最终没有解决)
https://social.technet.microsoft.com/Forums/appvirtualization/zh-CN/d0b6e085-5541-4817-aed6-6d8b82d6ad4b/-dcom-?forum=WinServerPreviewZHCN
文章中提到的注册表我设置了依然无效, 陷入困境,直到......
抱着试试看的态度,卸载了Windows上的安全更新,就是这里点红框打开:
奇迹发生了,0x00000005解决. 注: 我的安全补丁编码跟网上查到的并不一样, 所以最初没有删,后来全都删了就好了,这个编码规则咱也不知道.
2- 0x80010111
看到这个错误代码就准备重装系统吧, 这个百度的资料比较多,都是: utgard的协议5.6,但windows 10 2004之后的协议都是5.7 ,下面附上Win10各个小版本, 以便核对:
我的是20H2, 后来换成了Win10 1909 专业版, 问题解决;
3- 0x80070005
需要开启回话安全项:
this.session.useSessionSecurity(true);
怎么开启是个问题, 是在引入openscada的jar包里的Sever类中修改,这就犯难了, 其实没必要, 只要在自己项目下创建与openscada中Server类相同的路径,并复制Server过去改就行了, 项目会优先使用本地类,像下面这样