C# OPC 客户端无法获取服务器列表

Posted

技术标签:

【中文标题】C# OPC 客户端无法获取服务器列表【英文标题】:C# OPC Client fails to get server list 【发布时间】:2013-08-16 11:52:53 【问题描述】:

在我的新 Windows 8 64 位机器上编译 C# 后,在我的 OPC 客户端应用程序中获取可用服务器列表时开始出现以下错误。

"OpcNetApi.Com 无法将类型为“System.__ComObject”的 COM 对象转换为接口类型“OpcRcw.Comn.IOPCServerList2”。此操作失败,因为 IID 为“9DD0B56C-AD9E-43EE-8305-487F3188BF7A”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:未注册类(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG))。 "

可能是什么原因?

【问题讨论】:

你的 C# 编译为 32 位还是 64 位? Opc 是否在 32 位进程中运行? 我编译为 64 位。现在我改回32位,问题解决了。 @brainwipe 请将此作为答案写下来,以便我接受。 别担心,我更喜欢卡米尔的回答。 :) 【参考方案1】:

引自 OPC.NET 自述文件:

.NET COM 互操作程序集是针对 32 位版本构建的 代理/存根。这意味着任何运行在 x64 系统必须作为 32 位应用程序编译和运行

【讨论】:

【参考方案2】:

您好:要解决此问题,请安装 OPC .NET API OPC .NET API 2.00 Redistributables 105.1,然后安装 OPC Core Components Redistributable (x64) 105.1。 有了这个,您可以连接到运行在 32 位的 OPC Server 和运行在 64 位上的客户端。

【讨论】:

感谢您的回答。就我而言,我尝试安装 OPC Core Components 3.0.106(最新),但它并没有解决我的问题。我做了几件事,我不确定是哪个具体的事情修复了它,但我从 syswow64 中删除了“OpcEnum.exe”,安装了 Core Components 2.0.2.30,还使用 ​​installutil 将 OpcEnum 作为服务安装(但那是在重新安装之前-安装)。如果您遇到此问题,请尝试安装多个版本的核心组件。 经过更多测试,我相信在安装核心组件之前删除旧的dll和opcenum可以解决这个问题。 在 VS 中为任何 CPU 构建并按照此处的建议安装最新的 x64 OPC 核心组件修复了我的 OPC 连接问题。【参考方案3】:

不要忘记 Redistributables(OPC .NET API OPC .NET API 2.00 Redistributables、OPC Core Components Redistributables)和库(OpcNetApi.dll、OpcNetApi.Com.dll、OpcNetApi.Xml.dll...)项目中引用的版本必须相同。

【讨论】:

【参考方案4】:

我认为唯一的问题是您尝试使用不同的用户名和密码连接到远程计算机,您必须在远程计算机上创建与本地计算机用户名和密码相同的当前用户,然后您必须在远程计算机上配置“组件服务”- >控制台根->组件服务->计算机-> Dcom config-> OpcEnum设置并在属性中授予该用户访问权限->安全我的问题通过这种方式解决 祝你好运

【讨论】:

确实这只是使远程服务器可访问,如果您想访问远程计算机上的 opc 服务器,您必须为该 opc 服务器进行 dcom 配置 这是一个已有 5 年历史的问题,已经有一个公认的答案。我认为您的回答不会为这个问题增加任何价值。

以上是关于C# OPC 客户端无法获取服务器列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 客户端读取 OPC UA 节点属性值

C# Websockets 将序列化列表发送到 javascript

C# 使用 ftpRequest 获取完整的文件列表很慢

OPC UA 组播发现

如何在 HDF5 C# 上创建复合数据集

C# opc-client .net api