Я использую Eclipse Milo (0.2.3) в моем проекте для связи с OPC UA.Участниками OPC UA являются клиент (написанный с использованием Eclipse Milo) и сервер, работающий на удаленной машине и не реализованный с использованием Milo).
Я могу нормально подключить клиента к серверу, и еслиудаленный сервер выключен, я могу автоматически переподключить клиента, как только сервер снова станет доступным.
Однако после обновления программного обеспечения сервера клиент больше не может переподключиться, и он залилсервер со следующими сообщениями:
- Создать запрос сеанса
- Сервер может создать сеанс
- Активировать запрос сеанса
- Сервер отправляет ответ Activate Session, в котором ServerNonce отсутствует, а результат службы «плохой»
Это заставляет клиента отправлять новый CreateЗапрос сеанса.Все это происходит несколько раз в секунду, что делает невозможным выполнение сервером каких-либо других задач, а затем пытается создать этот сеанс.
Есть ли в 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
Заранее благодарим за вашепомощь.