我有一个用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标头响应时(例如Keep-Alive:timeout = 60,max = 100):see line 752,才设置HttpClient.keepAliveTimeout变量。

服务器不提供此标头。

根据this answer,这是预期的行为,但确实如此:


客户端无法指定超时,这是服务器配置
确定最大超时值。额外的Keep-Alive标头
可以告知客户端服务器愿意保留多长时间
连接打开...

最佳答案

尝试直接通过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);

07-24 09:49