opc UA 服务器重启时未创建 eclipse milo 会话

eclipse milo session not getting created when opc UA server restarts

我在我们的应用程序中使用 eclipse milo java OPCUA 客户端 SDK 来实现 OPC。 我能够创建会话、订阅和监控。它工作正常 但是当 opc 服务器重新启动并且我尝试删除以前的会话并创建一个具有相同参数的新会话时,我得到以下异常:

UaException: status=Bad_Timeout, message=timed out waiting for acknowledge

引发错误的行是:

EndpointDescription[] endpoints = UaTcpStackClient.getEndpoints(endpointurl).get();

在服务器端出现错误:

OPCUAServerEndPoint#_on_client_connection The maximum number of connection has b een reached - Connection is refused

但是,当我尝试使用相同的参数再次创建会话时,它确实被创建了

您不应该自己创建会话,因为这是由客户端为您处理的,您绝对不应该尝试删除之前的会话。

您唯一需要做的就是将 SubscriptionListener 添加到 OpcUaSubscriptionManager 并处理 onSubscriptionTransferFailed 回调。

收到此回调意味着客户端已重新连接并必须创建一个新会话,但服务器无法将其旧订阅转移到此会话。这通常发生在重新连接花费太长时间并且订阅超时或者某些原因导致服务器丢失其所有状态时,例如它会重新启动。

我添加了一个有点复杂的集成测试,证明所有这些确实有效,你可以 see it here