В дескрипторе Eclispe Milo отсутствует Sever Nonce в ActivateSessionRequest

Я использую Eclipse Milo (0.2.3) в своем проекте для связи OPC UA. Участниками OPC UA являются клиент (написанный с использованием Eclipse Milo) и сервер, который работает на удаленной машине и не реализован с использованием Milo).

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

Однако после обновления серверного программного обеспечения клиент больше не может повторно подключиться и засыпает сервер следующими сообщениями:

  • Create Session Request
    • The server is able to create a session
  • Activate Session Request
    • The server sends an Activate Session Response, in which the ServerNonce is missing and the service result is "bad"

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

Есть ли в Milo какие-нибудь настройки для указания задержки переподключения? Или есть какие-то настройки для определения того, что должно произойти при получении пустого ServerNonce?

Ответы сервера следующие:

  • Если сеанс можно активировать:

    OpcUa Binary Protocol
        Message Type: MSG
        Chunk Type: F
        Message Size: 96
        SecureChannelId: 1599759116
        Security Token Id: 1
        Security Sequence Number: 53
        Security RequestId: 3
        OpcUa Service : Encodeable Object
            TypeId : ExpandedNodeId
                NodeId EncodingMask: Four byte encoded Numeric (0x01)
                NodeId Namespace Index: 0
                NodeId Identifier Numeric: ActivateSessionResponse (470)
            ActivateSessionResponse
                ResponseHeader: ResponseHeader
                    Timestamp: Nov 16, 2018 14:05:47.974000000
                    RequestHandle: 1
                    ServiceResult: 0x00000000 [Good]
                    ServiceDiagnostics: DiagnosticInfo
                        EncodingMask: 0x00
                            .... ...0 = has symbolic id: False
                            .... ..0. = has namespace: False
                            .... .0.. = has localizedtext: False
                            .... 0... = has locale: False
                            ...0 .... = has additional info: False
                            ..0. .... = has inner statuscode: False
                            .0.. .... = has inner diagnostic info: False
                    StringTable: Array of String
                        ArraySize: 0
                    AdditionalHeader: ExtensionObject
                        TypeId: ExpandedNodeId
                        EncodingMask: 0x00
                ServerNonce: ab...
                Results: Array of StatusCode
                    ArraySize: 0
                DiagnosticInfos: Array of DiagnosticInfo
                    ArraySize: 0
    
  • Если сеанс не может быть активирован (после обновления ПО сервера):

    OpcUa Binary Protocol
        Message Type: MSG
        Chunk Type: F
        Message Size: 64
        SecureChannelId: 1599759041
        Security Token Id: 1
        Security Sequence Number: 61
        Security RequestId: 11
        OpcUa Service : Encodeable Object
            TypeId : ExpandedNodeId
            ActivateSessionResponse
                ResponseHeader: ResponseHeader
                    Timestamp: Nov 16, 2018 12:49:08.235000000 
                    RequestHandle: 222
                    ServiceResult: 0x80000000 [Bad]
                    ServiceDiagnostics: DiagnosticInfo
                        EncodingMask: 0x00
                            .... ...0 = has symbolic id: False
                            .... ..0. = has namespace: False
                            .... .0.. = has localizedtext: False
                            .... 0... = has locale: False
                            ...0 .... = has additional info: False
                            ..0. .... = has inner statuscode: False
                            .0.. .... = has inner diagnostic info: False
                    StringTable: Array of String
                        ArraySize: 0
                    AdditionalHeader: ExtensionObject
                        TypeId: ExpandedNodeId
                        EncodingMask: 0x00
                ServerNonce: <MISSING>[OpcUa Null ByteString]
                Results: Array of StatusCode
                    ArraySize: 0
                DiagnosticInfos: Array of DiagnosticInfo
                    ArraySize: 0
    

Спасибо заранее за вашу помощь.


person l_mcqueen    schedule 16.11.2018    source источник


Ответы (1)


Этот угловой случай, который вы описали, где нет задержки между неудачной повторной активацией и последующим повторным созданием, рассматривается в ветке dev/0.3 в этот коммит.

Возможно, я смогу перенести его на 0.2.x на следующей неделе, если у меня будет свободное время.

Я не думаю, что есть какие-то обходные пути, которые вы можете использовать.

person Kevin Herron    schedule 16.11.2018
comment
Привет, @Kevin Herron, я видел, что вы выпустили версию 0.3.0-M1. Я обновил свой проект, чтобы использовать эту промежуточную версию, и проблема с наводнением решена. Однако клиент не может автоматически повторно подключиться к серверу из-за исключений IOExceptions, обнаруженных в потоках milo-netty-event-loop. 2019-05-07 10: 58: 56,414 ОШИБКА 1616 --- [milo-netty-event-loop-2] UascClientMessageHandler: [remote = / 172.20.100.136: 4840] Обнаружено исключение: java.io.IOException: at sun. nio.ch.SocketDispatcher.read0 (Собственный метод) ~ [?:?] Не могли бы вы взглянуть? - person l_mcqueen; 07.05.2019
comment
@l_mcqueen не могли бы вы отправить сообщение в список рассылки с полными журналами и более подробной информацией? - person Kevin Herron; 07.05.2019