我有两个 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 对象来解决会话数量等问题,但他们回答说这是不可能的。我认为这个对象是必须启用的?
谁能给我暗示什么可能导致这种情况,以及在建立联系时我应该考虑哪些限制和事情,例如什么需要是独一无二的?应用名称?会话名称?等什么可能导致这个 - 看似 - “随机” BadSecureChannelClosed 错误。请注意,我在 Create Session 调用中使用了 updateBeforeConnect=true。我使用带有硬编码用户名和密码的 UserIdentity。
另一个奇怪的症状是,对于这个回复 BadSecureChannelClosed 的 OPC-UA 服务器,它在使用 UaExpert 连接到它时会出现 Discovery 错误(几周前不存在的错误):
16:58:41.806 | 自动更新 | 检索当前版本信息时出错:找不到 Host 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)