1

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

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

引发错误的行是:

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

在服务器端,我收到错误:

OPCUAServerEndPoint#_on_client_connection 已达到最大连接数 - 连接被拒绝

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

4

1 回答 1

2

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

您唯一需要做的就是在回调中添加一个SubscriptionListenerOpcUaSubscriptionManager处理onSubscriptionTransferFailed回调。

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

我添加了一个有点复杂的集成测试,证明所有这些确实有效,您可以在此处查看

于 2017-01-04T15:01:24.920 回答