1

首先:我是 OPCUA 的新手。:)

我正在尝试将 Milo 客户端连接到我们的服务器,但并不真正了解出了什么问题。示例客户端和服务器可以很好地协同工作,但是当我尝试将客户端示例与公共 OPC-UA-Test-Server 之一连接时,我得到了这些异常:

15:48:34.729 [ua-netty-event-loop-0] 调试 org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientAcknowledgeHandler - 在通道 = [id: 0xc22800c2, L:/10.22.19.217 上发送 Hello 消息:58947 - R:opcua.demo-this.com/52.233.134.134:51210]。15:48:34.729 [ua-netty-event-loop-0] WARN io.netty.channel.DefaultChannelPipeline - 触发了 exceptionCaught() 事件,它到达了管道的尾部。这通常意味着管道中的最后一个处理程序没有处理异常。java.io.IOException: 在 sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43) 的 sun.nio.ch.SocketDispatcher.read0(Native Method) 的远程主机强行关闭了现有连接。 sun.nio.ch.IOUtil.read(IOUtil.java:192) 在 sun.nio.ch.SocketChannelImpl 的 nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)。

我获取了示例代码并删除了证书/密钥对并将 URL 更改为,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);

我错过了什么?

提前问候和感谢:)

4

1 回答 1

0

埋在堆栈跟踪中的是真正的问题:UaException: timed out waiting for acknowledge.

也许您的防火墙或网络设置阻止了它,或者服务器没有将其发回,但问题是客户端从未收到Acknowledge响应其Hello.

FWIW,我可以毫无问题地ReadExample针对该公共服务器运行。在ReadExample我覆盖getSecurityPolicy()并返回SecurityPolicy.NoneClientExampleRunner只是替换了端点 URL。

于 2017-04-25T15:31:06.057 回答