使用JAX-WS客户端时打开的文件太多

时间:2012-04-03 16:36:32

标签: jax-ws

我正在使用基于JAX-WS的客户端与远程Web服务器通信的应用程序。我面临的问题是应用程序在请求完成后没有正确关闭HTTP连接。套接字处于CLOSED_WAIT状态。对于CLOSED_WAIT中的所有套接字,lsof -p的出现如下:

52u IPv6 6467002 TCP gsilin2.india.com:31842->gsilin2.india.com:7073(CLOSE_WAIT)  53u IPv6 6467357 TCP gsilin2.india.com:31970->gsilin2.india.com:7073(CLOSE_WAIT)  54u IPv6 6467480 TCP gsilin2.india.com:32015->gsilin2.india.com:7073(CLOSE_WAIT)  55u IPv6 6467368 TCP gsilin2.india.com:31974->gsilin2.india.com:7073(CLOSE_WAIT)

形成上面的场景,我的理解是JAX-WS内部没有关闭底层的HTTP连接。以下是应用程序中使用的代码段。

    BindingProvider bindingProvider = (BindingProvider)atuaPortType;
    bindingProvider.getBinding().setHandlerChain(handlerChain);
    Map<String, Object> map=bindingProvider.getRequestContext();  
    .....
    .....  

    map.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serverurl);
    Map map1 = new HashMap();
    map1.put("Connection", Collections.singletonList("close"));
    map.put(MessageContext.HTTP_REQUEST_HEADERS, map1);

当应用程序必须向Web服务器发送更多请求时,应用程序将因“打开文件太多”错误而崩溃。我找不到任何解决方案。

请帮我解决这个问题。

提前致谢。

Chandan Talukdar, 印度班加罗尔

1 个答案:

答案 0 :(得分:0)

使用最新版本的JAX-WS解决了该问题。随java提供的JAX-WS库不能正确关闭套接字。请点击以下链接

HTTP connection reuse in JAX-WS