我在我们的应用程序中使用eclipse milo java OPCUA客户端SDK进行OPC实现。 我能够创建会话,订阅和监视器。它工作正常 但是当opc服务器重新启动并且我尝试删除以前的会话并创建一个具有相同参数的新会话时,我得到以下异常:
UaException:status = Bad_Timeout,message =超时等待 确认
抛出错误的行是:
EndpointDescription [] endpoints = UaTcpStackClient.getEndpoints(endpointurl)获得();
在服务器端,我收到错误:
OPCUAServerEndPoint#_on_client_connection最大数量 已达到连接 - 拒绝连接
但是,当我尝试使用相同的参数再次创建会话时,它会被创建
答案 0 :(得分:0)
您不应该自己创建会话,因为这是由客户端为您处理的,您绝对不应该尝试删除之前的会话。
您唯一需要做的就是向SubscriptionListener
添加OpcUaSubscriptionManager
并处理onSubscriptionTransferFailed
回调。
接收此回调意味着客户端已重新连接并且必须创建新会话,但服务器无法将其旧订阅转移到此会话。这通常发生在重新连接花费太长时间并且订阅超时或者某些事情导致服务器失去其所有状态时,例如,它重新启动。
我添加了一个有点复杂的集成测试,证明所有这些确实有用,你可以see it here。