1

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

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

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

如果你用谷歌搜索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。

4

1 回答 1

-5

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

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

于 2014-06-11T13:20:24.090 回答