我有一个用apache-cxf(v3.3.2(生成的SOAP客户端。 客户端使用嵌入式Tomcat在Spring Boot应用程序中运行。
如何指定此 SOAP 客户端的保持活动超时?
到目前为止我发现的:
用于建立连接的插座在 5 秒后关闭。 此超时是基础 sun.net.www.http.HttpClient 中的硬编码默认值。它不受tomcat连接超时或com.sun.xml.internal.ws.request.timeout属性的控制。只有当服务器以 Keep-Alive 标头响应时,才会设置 HttpClient.keepAliveTimeout 变量(例如 Keep-Alive:timeout=60,max=100(:参见第 752 行。
服务器不提供此标头。
根据这个答案,这是预期的行为,但它真的是:
客户端无法指定超时,是服务器配置 这决定了最大超时值。额外的保持活动状态标头 可以通知客户端服务器愿意保留多长时间 连接打开...
尝试直接通过HTTPClientPolicy进行设置。我在我的 CXF 客户端中使用它。
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
// Set connection timeout
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(30000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setReceiveTimeout(30000);
http.setClient(httpClientPolicy);