问题描述
我有一个 milo opc ua 客户端,并使用 client.addFaultListener(this) 添加了一个故障侦听器,并且我已经覆盖了 onServiceFault 方法(以便它实现 ServiceFaultListener)。
当我关闭 opc ua 服务器时,我只收到来自 milo 的消息: [警告][org.eclipse.milo.opcua.sdk.cli] [4] Keep Alive failureCount=1 超过 failuresAllowed=0 但是我的错误监听器没有执行。
在什么情况下由milo执行onServiceFault监听器?
解决方法
当客户端实际收到来自服务器的 ServiceFault 响应时会调用它,这可能发生在多种情况下,其中之一是服务器不支持您调用的服务。
像您一样关闭服务器应该会在您添加到客户端的任何 SessionListener 上调用 onSessionInactive
。
我想我现在可以自己回答我的问题了:例如,当服务器连接丢失并且 milo 重新连接但订阅传输失败并且之后使用此无效订阅时,milo 将执行一个像这样的 ServiceFault 状态为 Bad_SubscriptionIdInvalid。
ServiceFault(responseHeader=ResponseHeader(timestamp=DateTime{utcTime=132556030188286769,javaDate=Wed Jan 20 08:56:58 CET 2021},requestHandle=116,serviceResult=StatusCode{name=Bad_SubscriptionIdInvalid,value=0x80280000,quality=bad},serviceDiagnostics=null,stringTable=[],additionalHeader=ExtensionObject{encoded=ByteString{bytes=null},encodingId=NodeId{ns=0,id=0}}))