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

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

"OpcNetApi.Com 无法将 COM 对象类型 'System.__ComObject' 强制转换为接口类型 'OpcRcw.Comn.IOPCServerList2'。此操作失败是因为对 IID 为 '{9DD0B56C-AD9E-43EE-8305-487F3188BF7A}' 的接口的 COM 组件进行 QueryInterface 调用失败,原因是出现以下错误: 类未注册 (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))."

这可能是什么原因?

你是将C#编译为32位还是64位?Opc是否在32位进程中运行? - Dr Rob Lang
1
我编译成了64位。现在我改回32位,问题解决了。@brainwipe请把这个写成答案,这样我就可以接受了。 - Demir
没关系,我更喜欢Camille的答案。 :) - Dr Rob Lang
4个回答

11

摘自 OPC.NET 自述文件:

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


7

你好:要解决这个问题,请安装OPC .NET API 2.00 Redistributables 105.1,然后再安装OPC Core Components Redistributable(x64)105.1。这样,你就可以从运行在64位客户端上的应用程序连接到运行在32位OPC服务器上的数据源了。


1
感谢您的回答。在我的情况下,我尝试安装了OPC Core Components 3.0.106(最新版本),但它并没有解决我的问题。我做了很多事情,不确定哪个具体的事情解决了问题,但我从syswow64中删除了“OpcEnum.exe”,安装了Core Components 2.0.2.30,并使用installutil将OpcEnum安装为服务(但那是在重新安装之前)。如果您遇到此问题,请尝试安装多个版本的Core Components。 - Jared Beach
1
经过更多的测试,我相信在安装核心组件之前删除旧的dll和opcenum是解决这个问题的方法。 - Jared Beach
在VS中为任何CPU构建,并按照建议安装最新的x64 OPC核心组件,这解决了我的OPC连接问题。 - Mr. Blonde

2

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


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

实际上,这只是使远程服务器可访问,如果您想访问远程机器上的OPC服务器,则必须为该OPC服务器进行DCOM配置。 - kaydream
1
这是一个五年前的问题,已经有了一个被接受的答案。我不认为你的回答对这个问题有任何价值。 - BlueWater86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接