天天看点

OPC 配置中的一些问题

最近做了一个小项目,功能很简单,就是编写一个OPC客户端软件实现从OPC服务器上获取数据然后转存到DB中。项目虽小但是值得考虑的地方仍不少,所谓麻雀虽小,五脏俱全。

1、DCOM正常配置

网上关于DCOM的配置五花八门,各种各样。当时刚开始配置的时候也是各种尝试,虽然能调通,但却不知道为什么通的。总结起来,主要是分为了两点:首先,要保证有权限访问对方,然后就是能够启动和激活com。

权限访问经常出现的连接失败等错误。这时候应该check一下:

a.对方防火墙是否关闭或者将相应的程序和端口加入到例外。

b.检查“控制面板”-“管理工具”-“本地安全策略”-“网络访问:本地账户的共享和安全模式”设为“经典-本地用户以自己的身份验证”。

    c.dcom的默认配置中没有加入相应用户的权限。即,服务端的访问限制中要存在客户端发起访问的账户。一般添加everyone账户,这也可以让所有的账户都有权限,这也虽然方便但是不安全,对于安全性要求高的还要设置统一账户,统一密码。

对于启动和激活权限,简单的设定也是全加入everyone账户。(这里要说明一点,有些资料说不能在“限制”中添加everyone账户否则会导致无妨访问等问题,本人试了试发现并没有像说的那样,还有的资料说要将Interactive,system,network,administrator账户一并加入,这里我也没有加入,但依然可以访问。具体原因没有探索。。。)如果是使用opc客户端枚举DCOM端的com名称,则需要配置opcenum时加入ANONYMOUS LOGO账户,然而,这只是用于枚举com名称,并不会影响访问。就是说如果事先知道com名称则不需要配置opcenum,直接使用com名称来访问应该也是可以的。在配置具体的opc服务时,我觉得基本不用配置,使用默认的配置一般都是可以的,如果不行再按照opcenum的配置来配就可以。如果实在不知道怎么配,那就简单的给所有可配的把上述几种提到的转户一股脑的全加进去,也未尝不可。

2、失误配置

不能不说,我这人手贱。在尝试了各种配置不果时,我会尝试一些奇葩的配置。而这也让我尝到不少的苦头。

         a.在参照网上的配置,将“控制面板”-“管理工具”-“本地安全策略”-“DCOM-安全描述符。。。”的“没有定义”修改了一下,结果怎么也无法改回去了。而且还导致了“组建服务-“我的电脑”-“COM安全”-“编辑限制”变为灰色的,直接无妨编辑了。经过各种查找,删除注册表“HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DCOM”就可以了。

         b.另一个失误是将“组建服务-“我的电脑”-“COM安全”中的everyone账户给删除了,导致这个“COM安全”都编程灰色,无法编辑。依然是通过删除注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole”下的限制和默认项,不过在删除前,先导出保存一下注册表。防止误删。

        c.还有一个失误是不小心删除了OpcEnum “安全”里的某个选项的账户,导致整个OpcEnum都无法配置。无论重重新regserver,还是重新安装opcenum.exe,都无济于事。最后,依然是通过修改万能的注册表,“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{13486D44-4821-11D2-A494-3CB306C10000}”额,删除那个来着,忘记了,好像也是个限制,如果没有权限,右键添加相应用户的权限。

   总之,以上失误导致的问题,除非重装系统,否则,即便是重新按照DCOM等也不能解决问题,任何配置都可以通过注册表来修改。也不要因此就将这个注册表导出备份,因为当你再导入的时候,会有很多项提示没有权限,而你也不知道是那个地方有问题,按个添加权限不现实。所以,需要修改那个项,就导出那个项好了。

3、交互式用户还是启动用户

这个问题,一开始一直不明白,只是听别人说选这交互式用户就行了。直到有一天,发现“交互式用户”无法启动COM,“启动用户”却可以启动COM,我才研究了一下这两个用户的区别。

交互式用户:何谓交互,就是交换,互换。当你通过DCOM访问对方的时候,采用交互式用户会将你的访问账户“转换”为对方当前登录的账户。所有的操作都是以对方当前登录用户的权限来操作的。当有多个用户访问的时候,都是以对方当前的登录用户来操作。如果,之前已经有人启动了服务,则使用之,不会再启动一个服务。是多对一个的关系。

  启动用户:启动用户没有转换的过程,你是以什么身份访问还是按照什么身份访问,只要你有这个权限。对方系统会给每一个登录到其系统的账户单独的开辟一份空间来启动相应的服务。也就是说,当有多个用户访问的时候,会导致多个内存空间,这样可能会导致内存的浪费。

值得一说到 是,我当初访问的OPC服务器是个工程机,而且装在机房,我只能通过远程连接来配置,当时选择的是交互式用户,配置完以后我通过远程连接重启了电脑,然后在远程连接登录进去,始终都无法启动com服务,提示说“因为配置标识不正确,无妨启动服务。。”,反反复复排除都无法解决,然而,选择启动用户就可以。最后发现我是使用远程连接登录的,采用交互式用户会转换为远程连接的用户,而这个用户我又没有配置访问和启动权限,所以一直无妨连接,最后还是跑到机房把电脑重启,然后使用管理员账户登录进去,然后再远程连接,这样就可以了。

万恶的DCOM,万恶的OPC。

原文:https://blog.csdn.net/rizhaolutong/article/details/20309779 

继续阅读