OPC-UA BadSecureChannelClosed

OPC-UA BadSecureChannelClosed

我有两个 windows 服务,一个服务 (service1) 连接到两个 OPC-UA 服务器,这工作正常。另一个 windows 服务 (service2) 使用来自 OPC-UA 基金会的 .NET 参考堆栈的相同连接代码连接到相同的两个 OPC-UA 服务器。

Service1 可以连接到两个 OPC-UA 服务器,并且成功轮询数据。在部署 Service2 期间,Service2 还可以连接两个 OPC-UA 服务器并从中读取值。此时一切都很好。

但是,现在过了一段时间,没有对任何代码做任何改动。 Service2 无法再连接到其中一台 OPC-UA 服务器,在执行 Session.Create 时,它只是回复 ServiceResultException BadSecureChannelClosed(2156265472).

开始故障排除:在我们的客户站点上,我们还有一个测试服务器,它运行与生产环境相同的设置,这意味着 Service1 和 Service2 也在测试服务器上运行,并以与那些服务器相同的方式进行通信两个 OPC-UA 服务器。

我注意到当我关闭测试服务器上的服务时,Service2 的 BadSecureChannelClosed 错误消失了(但是 Service2 仍然可以与两个 OPC-UA 服务器中的另一个通信)。让一切都在生产服务器上按预期工作。

这让我想知道 OPC-UA 服务器上的会话和连接有哪些限制。 OPC-UA 服务器的类型为 SINUMERIK 840d。我问西门子是否可以激活 ServerDiagnostics 对象来解决会话数量等问题,但他们回答说这是不可能的。我以为这个对象是强制性的才能启用?

任何人都可以告诉我可能导致这种情况的原因,以及在建立连接时我应该考虑哪些限制和事项,例如什么需要独特?应用名称?会话名称?等等。是什么导致了这个 - 看似 - "random" BadSecureChannelClosed 错误。请注意,我在创建会话调用中使用了 updateBeforeConnect=true。我使用带有硬编码用户名和密码的 UserIdentity。

另一个奇怪的症状是,对于这个回复 BadSecureChannelClosed 的 OPC-UA 服务器,在使用 UaExpert 连接到它时会出现发现错误(几周前不存在的错误):

16:58:41.806 |自动更新 |检索当前版本信息时出错:找不到主机 updates.unified-automation.com

16:58:35.404 |发现小部件 | opc.tcp://192.168.0.200:4840 上的发现 GetEndpoints 失败 (BadCommunicationError)

16:58:35.401 |发现小部件 | opc.tcp://192.168.0.200:4840 上的发现 FindServers 失败 (BadCommunicationError)

当前的 Sinumerik OPC UA 服务器存在问题,无法提供正确编码的 ExtensionObjects。一旦可用,您将需要向西门子请求对服务器的更新。

请注意,您可以使用 UaExpert 毫无问题地访问它,它可以解码编码错误的 ExtesionObjects。这使得他们能够首先发布这样一个有缺陷的版本。

编辑:关于 ExtensionObjects 的注意事项:如果您尝试将 ServerStatus 作为一个完整的结构来阅读,它会作为 ExtensionObject 进行传输。此外,PublishResponse(用于提供订阅数据)包括编码为 ExtensionObjects 的数据更改。因此,如果您仅通过 ServerState 监视状态,它可能会起作用。但是无论如何,订阅将不起作用。