【发布时间】:2014-12-15 13:09:01
【问题描述】:
我们已经实现了一个 JAX-WS 客户端并面临以下问题。 这是一个有状态的会话同步流。客户端最初成功地一一发出两个请求/响应
该问题的 3 个不同案例
1)在前两个请求/响应之后,我在收到第二个请求的响应后的第 6 和第 9(两个不同的测试用例)秒后发出第三个请求。 在这两种情况下,从 tcpdump 我可以看到我们的客户端正在通过 [FIN,ACK] 关闭现有的 tcp 连接并为第三个请求打开一个新连接。 但由于这是有状态会话,服务器预计连接不应关闭,因此我们会收到错误响应。
2) 如果我在第 2 次请求后 5 秒内发出第 3 次请求,则重复使用相同的 tcp 连接。
3) 如果我根本不发出第三个请求,那么在 10 秒后自动(通过第二个请求的 [FIN,ACK],tcp 连接被客户端关闭。
基本上问题是客户端应用程序正在自行关闭 tcp 连接。 我已尝试设置以下所有属性。但我仍然面临同样的问题。
BindingProvider bp = (BindingProvider)port;
Map<String, Object> context = bp.getRequestContext();
context.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
context.put(JAXWSProperties.CONNECT_TIMEOUT, 60000);
context.put(JAXWSProperties.REQUEST_TIMEOUT, 70000);
context.put("com.sun.xml.ws.connect.timeout", 50000);
context.put("com.sun.xml.ws.request.timeout", 50000);
context.put("javax.xml.ws.client.connectionTimeout", 60000);
context.put("javax.xml.ws.client.receiveTimeout", 70000);
我附上 pcap 文件的截图供您参考。在这里您可以看到客户端在 6 秒后发出的 [FIN,ACK]。
我不确定我是否缺少任何其他配置。你能帮我解决这个问题吗?
版本: Java:jdk1.6.0_21
地铁:地铁/2.3
HTTP:1.1
我注意到的另一件事是,请求中有一个“连接:保持活动”,但它在服务器的响应中不存在。不确定这是否是个问题
【问题讨论】:
-
嗨。我遇到了完全相同的问题,但在我的情况下,客户端存根在 15 秒后关闭连接。你找到解决办法了吗?
-
@IgorZelaya nope..由于问题升级,我没有时间进一步检查。如果在超过 4 或 5 秒内没有实际流量,我会通过发送虚拟消息(如 ping)来提供解决方法。这样我就避免了连接被关闭。
-
您确定它是 jax-ws 客户端本身,而不是客户端和服务提供商之间的代理或设备,具有不活动超时,例如防火墙? “keepalive”或 ping 也可以避免这种情况。在其他有状态或重用的连接场景(例如 jdbc 连接池)中很常见。 jax-ws 客户端应用记录或报告什么?
标签: java web-services tcp jax-ws java-metro-framework