milo: Bad_SessionIdInvalid "Идентификатор сеанса недействителен." - PullRequest
0 голосов
/ 10 июля 2019

Я получаю «Идентификатор сеанса недействителен».исключение при чтении значения узла, но просто иногда я знаю, что сеанс не является тайм-аутом, так почему?

исключение:

java.util.concurrent.ExecutionException: UaServiceFaultException: status=Bad_SessionIdInvalid, message=The session id is not valid.
at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
at com.ggnykj.smartems.cloud.server.autocontrol.client.OpcClientServer.readNode(OpcClientServer.java:230)
at com.ggnykj.smartems.cloud.server.autocontrol.controller.OpcClientServerController.readNode(OpcClientServerController.java:115)
at com.ggnykj.smartems.cloud.server.autocontrol.server.SaveExOpcData.run(SaveExOpcData.java:59)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)

Причина: UaServiceFaultException: status = Bad_SessionIdInvalid, сообщение = идентификатор сессии недействителен.в org.eclipse.milo.opcua.stack.client.UaTcpStackClient.lambda $ receiveResponse $ 16 (UaTcpStackClient.java:367) в org.eclipse.milo.opcua.stack.core.util.ExecutionQuetete: 107) в java.base / java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:515) в java.base / java.util.concurrent.FutureTask.run $$$ capture (FutureTask.java:264) в java.base / java.util.concurrent.FutureTask.run (FutureTask.java) ... еще 3 Исключение в потоке "pool-2-thread-2" java.lang.NullPointerException в com.ggnykj.smartems.cloud.server.autocontrol.controller.OpcClientServerController.readNode (OpcClientServerController.java:116) в com.ggnykj.smartems.cloud.server.autocontrol.server.SaveExOpcData.run (java).concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128) в java.base / java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:628) в java.base / java.lang..java: 834)

my code :

MyX509IdentityProvider x509IdentityProvider = new MyX509IdentityProvider (clientOption.opcServer.getCertFilePath (), clientOption.opcServer.getPrivateKeyPath ());X509Certificate cert = x509IdentityProvider.getCertificate ();KeyPair keyPair = новая KeyPair (cert.getPublicKey (), x509IdentityProvider.getPrivateKey ());

    OpcUaClientConfig config = OpcUaClientConfig.builder()
        .setApplicationName(LocalizedText.english(clientOption.opcServer.getOpcServerName()))
        //.setApplicationUri("urn:eclipse:milo:examples:client")
        .setApplicationUri("")
        //.setCertificate(loader.getClientCertificate())
        //.setKeyPair(loader.getClientKeyPair())
        .setCertificate(cert)
        .setKeyPair(keyPair)
        .setEndpoint(endpoint)
        .setIdentityProvider(clientOption.getIdentityProvider())
        .setChannelLifetime(uint(600000000))
        .setSessionTimeout(uint(600000000))
        //.setRequestTimeout(uint(5000))
        .build();

    return new OpcUaClient(config);

 private OpcUaClient getOpcClient(OpcServer opcServer){
    OpcUaClient client = null;
    if(null!=opcClientMap.get(opcServer.getOpcServerId())){
        client = opcClientMap.get(opcServer.getOpcServerId());
    }else{
        try {
            ClientOption clientOption = new ClientOption(opcServer);
            client =  new ClientOptionRunner(clientOption).createClient();
        }catch (Throwable t){
            logger.error("Error getting client: {}", t.getMessage(), t);
        }
        opcClientMap.put(opcServer.getOpcServerId(),client);
    }
    return client;

}

public DataValue readNode(OpcServer opcServer,NodeId nodeId){
    OpcUaClient client = getOpcClient(opcServer);
    DataValue value = null;

    try {
        client.connect().get();  
        value = client.readValue(0.0, TimestampsToReturn.Both, nodeId).get(); 
    }catch (Exception e){
        e.printStackTrace();
    }
    return value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...