实现UA客户端时,这是一个非常常见的问题.
服务器最终负责您获取的端点的内容,并且您连接的端点(错误)配置为在端点URL中返回127.0.0.1.
您需要检查从服务器获得的端点,然后根据应用程序的性质,立即用新修复的EndpointDescriptions替换它们,其中包含您已修改的URL或让用户知道并首先请求他们获得许可.
无论哪种方式,您都需要创建一组新的EndpointDescriptions,在此之前您已经更正了URL,然后再继续创建OpcUaClient.
或者……您可以弄清楚如何正确配置服务器,以便返回包含可公开访问的主机名或IP地址的端点.
更新:
替换端点URL的代码可能是这样的一些变体:
private static EndpointDescription updateEndpointUrl(
EndpointDescription original, String hostname) throws URISyntaxException {
URI uri = new URI(original.getEndpointUrl()).parseServerAuthority();
String endpointUrl = String.format(
"%s://%s:%s%s",
uri.getScheme(),
hostname,
uri.getPort(),
uri.getPath()
);
return new EndpointDescription(
endpointUrl,
original.getServer(),
original.getServerCertificate(),
original.getSecurityMode(),
original.getSecurityPolicyUri(),
original.getUserIdentityTokens(),
original.getTransportProfileUri(),
original.getSecurityLevel()
);
}
警告:这在大多数情况下都适用,但是一个值得注意的情况是它不起作用的是远程端点URL包含URL主机名中不允许的字符(根据RFC),例如下划线(‘_’),不幸的是,在例如允许的情况下Windows计算机的主机名.因此,您可能需要使用一些其他方法来解析端点URL,而不是依赖URI类来执行此操作.