Web services HttpClient:空闲5分钟后连接重置,是否可以保持活动状态?

Web services HttpClient:空闲5分钟后连接重置,是否可以保持活动状态?,web-services,soap,groovy,apache-commons-httpclient,connection-reset,Web Services,Soap,Groovy,Apache Commons Httpclient,Connection Reset,我正在使用HttpClient向web服务发送SOAP请求以查询一些数据。对于某些Web服务参数,Web服务的执行时间超过5分钟,5分钟后,我得到一个java.net.SocketException:Connection reset 我认为发生此错误是因为连接闲置超过5分钟,然后防火墙会限制连接 有没有办法为http post请求发送一个保持活动的包或其他东西来保持连接活动?(如果可能,我需要一个客户端解决方案) 如果你在google上搜索HttpClient keep alive,你会发现很多

我正在使用
HttpClient
向web服务发送
SOAP
请求以查询一些数据。对于某些Web服务参数,Web服务的执行时间超过5分钟,5分钟后,我得到一个
java.net.SocketException:Connection reset

我认为发生此错误是因为连接闲置超过5分钟,然后防火墙会限制连接

有没有办法为http post请求发送一个保持活动的包或其他东西来保持连接活动?(如果可能,我需要一个客户端解决方案)

如果你在google上搜索HttpClient keep alive,你会发现很多关于重用连接的主题。在我的情况下,我只想保持连接,直到得到响应

方法来执行SOAP请求:

def executeSOAPRequest(String url, String content, String soapAction, Integer timeout) {
    def retVal = new SoapResponse();

    PostMethod post = new PostMethod(url);

    RequestEntity entity = new StringRequestEntity(content,"ISO-8859-1","ISO-8859-1");

    post.setRequestEntity(entity);
    post.setRequestHeader("SOAPAction", soapAction);

    HttpClient httpclient = new HttpClient()
    httpclient.setTimeout(timeout)

    try {
        retVal.httpResponse = httpclient.executeMethod(post);
        retVal.httpResponseBody = post.getResponseBodyAsString();
    } catch(Exception e){
        ... exception handling ...
    } finally {
        ... finally stuff ...
    }

    return retVal;
}

目前使用的是HttpClient v3.1。

5分钟是电信业的永恒,现在可以在更短的时间内传输1GA,保持连接空闲不仅会消耗终端机器的资源,还会消耗路由器和防火墙等中间节点的资源


因此,我认为您不应该尝试让连接保持活动状态这么长时间,特别是如果您不管理您正在使用的网络(即,防火墙可能有自己的超时并终止您的连接),您应该减少服务器需要响应的时间,或者使用其他异步通信机制

@tim_-yates保持活动的策略似乎是基于
HttpResponse
public long-getKeepAliveDuration(HttpResponse-response,HttpContext-context
)但如果我还没有得到回应怎么办?问题是我无法改变系统设计。所以我唯一的选择就是保持连接。如果一个人在月球上行走,你可能会改变系统设计:)你的根本问题是你的系统使用了错误的工具:一把更大的刀无助于喝汤。您可以尝试优化服务器中的响应时间(同样,5分钟是永恒的),但最终您的系统将需要使用异步调用。但在一家大公司里,你不可能一个人去改变事情。改变需要花钱,否则就没钱了。除此之外,许多系统都依赖于这种设计。这将是一个巨大的努力,以改变他们所有。如果有人愿意改变他们,那么还有很多其他事情也必须改变,并且有更高的优先级。