Увеличенный идентификатор токена канала делает сеанс непригодным для использования: как я могу обработать это в клиенте Eclipse Milo?

Я использую Eclipse Milo Client SDK 0.2.2 против KEPServerEX версии 5.2 и иногда теряю соединение. В моем журнале я получил эти трассировки стека:

ERROR 5048 --- [hared-pool-1693] o.e.m.o.s.c.h.UaTcpClientMessageHandler  : Error decoding asymmetric message: expected sequence number 1140680 but received 1140681
org.eclipse.milo.opcua.stack.core.UaException: expected sequence number 1140680 but received 1140681
    at org.eclipse.milo.opcua.stack.core.channel.ChunkDecoder$AbstractDecoder.decode(ChunkDecoder.java:166)
    at org.eclipse.milo.opcua.stack.core.channel.ChunkDecoder.decode(ChunkDecoder.java:83)
    at org.eclipse.milo.opcua.stack.core.channel.ChunkDecoder.decodeAsymmetric(ChunkDecoder.java:63)
    at org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientMessageHandler.lambda$onOpenSecureChannel$6(UaTcpClientMessageHandler.java:492)
    at org.eclipse.milo.opcua.stack.core.channel.SerializationQueue.lambda$decode$1(SerializationQueue.java:64)
    at org.eclipse.milo.opcua.stack.core.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:107) 

ERROR 5048 --- [hared-pool-1677] o.e.m.o.s.c.h.UaTcpClientMessageHandler  : Error validating chunk headers: received unknown secure channel token: tokenId=57 currentTokenId=56 previousTokenId=55
org.eclipse.milo.opcua.stack.core.UaException: received unknown secure channel token: tokenId=57 currentTokenId=56 previousTokenId=55
    at org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientMessageHandler.validateChunkHeaders(UaTcpClientMessageHandler.java:704)
    at org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientMessageHandler.lambda$onSecureMessage$10(UaTcpClientMessageHandler.java:621)
    at org.eclipse.milo.opcua.stack.core.channel.SerializationQueue.lambda$decode$1(SerializationQueue.java:64)
    at org.eclipse.milo.opcua.stack.core.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:107)

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

Является ли это ожидаемым поведением сервера OPC и должен ли я с этим справиться?

Я знаю, что могу справиться с тайм-аутом в моем потоке keep-session-open, может быть, отключиться и создать новый сеанс, но есть ли более элегантный способ сделать это?


person Oystein Myhre    schedule 20.11.2018    source источник


Ответы (1)


Здесь вам нечего делать (в коде).

Возможно, вам потребуется обновить KEPServerEX до более новой версии. Также доступна более поздняя версия Milo (0.2.4), но я не думаю, что была обнаружена или исправлена ​​какая-либо подобная проблема.

Похоже, что происходит либо:

1) KSE ложно отправляет кусок, защищенный токеном из будущего.

2) KSE получает запрос на обновление безопасного канала и, прежде чем отправить ответ, использует новый токен для защиты фрагмента. (это, скорее всего, причина, и на самом деле звучит смутно знакомо)

person Kevin Herron    schedule 20.11.2018