2017-04-25 916 views
0

首先:我是OPCUA的新手。 :)Milo:連接到(公共)OPC-UA服務器

我試圖連接一個米洛客戶端到我們的服務器,但不真正明白什麼是錯的。樣本客戶機和服務器工作正常起來,但是當我嘗試到客戶端樣本與公衆OPC-UA-測試的服務器的一個連接,我得到的那些異常:

15:48:34.729 [UA-網狀-event-loop-0] DEBUG org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientAcknowledgeHandler - 在通道= [id:0xc22800c2,L:/10.22.19.217:58947 - R:opcua]上發送了Hello消息。 demo-this.com/52.233.134.134:51210。 15:48:34.729警告io.netty.channel.DefaultChannelPipeline - 一個exceptionCaught()事件被觸發,它到達管道的尾部 。它通常意味着流水線中的最後一個處理程序確實不會處理異常,例如 。 java.io.IOException:現有連接 被遠程主機強制關閉了 sun.nio.ch.SocketDispatcher.read0(Native Method) sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)在 sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)at sun.nio.ch.IOUtil.read(IOUtil.java:192)at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl。的java:380)在 io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:221) 在 io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:898) 在 io.netty.channel。 socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:242) 在 io.netty.channel.nio.AbstractNioByteChannel $ NioByteUnsafe.read(AbstractNioByteChannel.java:119) 在 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528) 在 io.netty。 channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:485) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:399) 在io.netty.channel.nio.NioEventLoop.run(NioEventLoop .java:371)at io.netty.util.concurrent.SingleThreadEventExecutor $ 2.run(SingleThreadEventExecutor.java:112) at java.lang.Thread.run(Thread.java:745)15:48:39.612 [ForkJoinPool .commonPool-worker-1]調試 org.ecl ipse.milo.opcua.stack.client.ClientChannelManager - 頻道 引導失敗:超時等待確認 org.eclipse.milo.opcua.stack.core.UaException:超時等待 確認在 org.eclipse.milo .opcua.stack.client.handlers.UaTcpClientAcknowledgeHandler.lambda $ startHelloTimeout $ 4(UaTcpClientAcknowledgeHandler.java:156) at org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientAcknowledgeHandler $$ Lambda $ 27/469017260.run(未知 源)在 io.netty.util.HashedWheelTimer $ HashedWheelTimeout.expire(HashedWheelTimer.java:581) 在 io.netty.util.HashedWheelTimer $ HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:655) 在 io.netty.util.HashedWheelTimer $ Worker.run(HashedWheelTimer.java:367) 在java.lang.Thread.run(Thread.java:745)15:48:39.613 [主要] ERROR org.eclipse.milo例如:UaException:status = Bad_Timeout,message =超時等待 確認java.util.concurrent.ExecutionException:UaException: status = Bad_Timeout,message =超時等待確認 java的。util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357) 在 java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1887) 在 org.eclipse.milo.examples.client.ClientExampleRunner.createClient( ClientExampleRunner.java:56) 在 org.eclipse.milo.examples.client.ClientExampleRunner.run(ClientExampleRunner.java:103) 在 org.eclipse.milo.examples.client.BrowseExample.main(BrowseExample.java: 40)引起 :org.eclipse.milo.opcua.stack.core.UaException:超時 在 org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientAcknowledgeHandler.lambda $ startHelloTimeout $ 4等待確認(UaTcpClientAcknowledgeHandler的.java :156) 在 org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientAcknowledgeHandler $$ LAMBDA $ 27日/ 469017260.run(未知 來源)在 io.netty.util.HashedWheelTimer $ HashedWheelTimeout.expire(HashedWheelTimer。 Java的:581) 在 io.netty.util.HashedWheelTimer $ HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:655) 在 io.netty.util.HashedWheelTimer $ Worker.run(HashedWheelTimer.java:367) 是java。 lang.Thread.run(Thread.java:745)15:48:42.842 [threadDeathWatcher-2-1] DEBUG io.netty.buffer.PoolThreadCache - Freed 2個線程本地緩衝區(s)來自線程:ua-netty -event-loop-0

我拿着樣品代碼並刪除了證書/密鑰對,改變了網址opc.tcp://opcua.demo-this.com:51210/UA/SampleServer,因爲公共服務器不需要授權:

SecurityPolicy securityPolicy = clientExample.getSecurityPolicy(); 
EndpointDescription[] endpoints = UaTcpStackClient.getEndpoints("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer").get(); 

EndpointDescription endpoint = Arrays.stream(endpoints) 
    .filter(e -> e.getSecurityPolicyUri().equals(securityPolicy.getSecurityPolicyUri())) 
    .findFirst().orElseThrow(() -> new Exception("no desired endpoints returned")); 

logger.info("Using endpoint: {} [{}]", endpoint.getEndpointUrl(), securityPolicy); 

loader.load(); 

OpcUaClientConfig config = OpcUaClientConfig.builder() 
    .setApplicationName(LocalizedText.english("eclipse milo opc-ua client")) 
    .setApplicationUri("urn:eclipse:milo:examples:client") 
    //.setCertificate(loader.getClientCertificate()) 
    //.setKeyPair(loader.getClientKeyPair()) 
    .setEndpoint(endpoint) 
    .setIdentityProvider(clientExample.getIdentityProvider()) 
    .setRequestTimeout(uint(5000)) 
    .build(); 

return new OpcUaClient(config); 

我缺少什麼?

的問候和感謝提前:)

回答

0

在堆棧跟蹤埋是真正的問題:UaException: timed out waiting for acknowledge

也許您的防火牆或網絡設置阻止了它,或者服務器沒有發回它,但問題是客戶端從未收到Acknowledge消息以響應其Hello

FWIW,我可以運行ReadExample針對該公共服務器沒有問題。在ReadExample我覆蓋getSecurityPolicy()並返回SecurityPolicy.None和在ClientExampleRunner剛剛取代了端點URL。

+0

好的,所以防火牆似乎是問題所在。雖然我不明白爲什麼,因爲我可以連接到其他客戶端的樣本服務器(使用Integration Objects和Prosys OPC UA客戶端進行測試) – lukas