是否所有UA Server自带发现服务?普通OPC UA Server与LDS类发现服务器有何区别?
OPC UA 发现服务相关问题解答
基础结论
- 符合OPC UA规范的服务器必须实现基础的自发现能力,但不是每台UA Server都自带完整的发现服务(也就是作为专职Discovery Server的能力)。规范强制要求所有UA Server实现返回自身端点信息的发现接口,但专门的发现服务能力(注册其他服务器、提供全网服务器索引)只有LDS这类专职Discovery Server才会完整提供。
普通UA Server与LDS类Discovery Server的核心差异
两类服务虽然都遵循UA Server的接口规范,都持有discovery URL和业务endpoint URL,但定位完全不同:
- 普通OPC UA Server:核心价值是承载业务逻辑,对外提供实时数据读写、事件订阅、节点方法调用等业务服务,发现能力只是附属的自描述功能,仅用于告知客户端"我是谁、我有哪些可用连接端点"。
- LDS(本地发现服务器)这类专职Discovery Server:不承载任何业务数据与业务服务,核心定位是OPC UA网络内的公共地址簿,负责收集、索引全网内所有UA应用的访问信息,帮客户端快速定位到需要连接的目标服务器。
findServers()与registerServer()方法的实际差异
两类服务上的同名方法接口签名完全符合OPC UA统一规范,所以看起来功能一致,但内部逻辑和返回结果有本质区别:
findServers() 差异
- 普通UA Server上的该接口:无论调用时传入什么过滤参数,永远只返回当前服务器自身的所有可用端点配置信息,不会返回网络内其他任何服务器的信息,本质是服务器的自描述接口。
- Discovery Server上的该接口:会返回本地注册表中存储的、所有已完成注册的UA服务器的端点信息列表,支持按服务器名称、协议类型、安全策略等条件过滤查询结果,返回的是全网可访问的服务器目录。
注:规范要求discovery URL必须支持无安全校验访问,两类服务都遵守该规则,但返回内容的范围完全不同。
registerServer() 差异
- 普通UA Server上的该接口:绝大多数场景下是空实现,或直接返回
Bad_ServiceUnsupported状态码。普通服务器没有接收其他服务器注册的职责,不会存储其他服务器的信息,它自身只会在启动时作为调用方,主动向指定的LDS上报自己的信息完成注册。 - Discovery Server上的该接口:是核心功能入口,负责接收所有UA Server主动上报的注册信息,校验后将服务器名称、端点地址、支持的安全配置等信息存入本地注册表,供后续客户端查询调用。
部署场景参考
- 小型组网场景(仅1~2台UA服务器):不需要单独部署LDS,客户端直接访问目标服务器的discovery URL获取端点信息直连即可。
- 中大型组网场景(多台UA设备/服务器跨网段部署):通常会独立部署LDS,所有服务器启动后自动向LDS注册自身信息,客户端仅需记录LDS的地址,即可查询到全网所有可用的UA服务器,无需逐个维护服务器地址列表。
内容的提问来源于stack exchange,提问作者CornCoder99
相关产品推荐
相关产品推荐

