Сеанс eclipse milo не создается при перезапуске сервера opc UA

Я использую клиентский SDK eclipse milo java OPCUA в нашем приложении для реализации OPC. Я могу создать сеанс, подписку и мониторинг. Он работает нормально, но когда сервер opc перезагружается, и я пытаюсь удалить предыдущий сеанс и создать новый с такими же параметрами, я получаю следующее исключение:

UaException: status = Bad_Timeout, message = timed out, ожидая подтверждения

Строка, которая вызывает ошибку:

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

На стороне сервера я получаю сообщение об ошибке:

OPCUAServerEndPoint # _on_client_connection Достигнуто максимальное количество подключений - в подключении отказано

Однако, когда я пытаюсь снова создать сеанс с теми же параметрами, он создается.


person Ajay Sharma    schedule 04.01.2017    source источник
comment
Почему вы хотите создать новую сессию? Я уверен, что то, чего вы хотите достичь, можно сделать по-другому.   -  person enigma    schedule 09.01.2017


Ответы (1)


Вы не должны создавать сеанс самостоятельно, так как этим занимается клиент, и вам определенно не следует пытаться удалить предыдущий сеанс.

Единственное, что вам нужно сделать, это добавить SubscriptionListener к OpcUaSubscriptionManager и обработать обратный вызов onSubscriptionTransferFailed.

Получение этого обратного вызова означает, что клиент повторно подключился и должен был создать новый сеанс, но сервер не смог передать свои старые подписки в этот сеанс. Обычно это происходит, когда для повторного подключения потребовалось слишком много времени и истекло время подписки, или если что-то заставило сервер потерять все свое состояние, например он перезапускается.

Я добавил несколько запутанный интеграционный тест, демонстрирующий, что все это действительно работает, вы можете см. здесь.

person Kevin Herron    schedule 04.01.2017