我正在使用 Spring 的 WebServiceTemplate 来使用 SOAP Web 服务,该服务需要超过 1 分钟才能响应。WebServiceTemplate 上的默认读取超时为 60 秒。
为了更改和扩展 readtimeout 属性,我实现了以下代码:
WebServiceMessageSender[] senders = template.getMessageSenders();
for (WebServiceMessageSender sender : senders) {
HttpUrlConnectionMessageSender httpComponentsMessageSender =(HttpUrlConnectionMessageSender) sender;
httpComponentsMessageSender.setReadTimeout(Duration.ofSeconds(300));
}
现在请求在 60 秒后没有完成。但是即使 SOAP 服务在 120 秒后响应,请求也会保持等待,并且在 300 秒后会引发 java.net.SocketTimeoutException: Read timed out。
现在我只是针对具有网络延迟配置的 MockServer 进行测试。如果我删除延迟并删除 readTimeOut 属性,一切正常。
你知道我做错了什么吗?