Я использую 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
Спасибо заранее за вашу помощь.