我正在使用HttpClient
向网络服务发送SOAP
请求以查询某些数据。对于某些web服务参数,webservice的执行时间超过5分钟,5分钟后我得到java.net.SocketException: Connection reset
。
我认为发生错误是因为连接空闲时间超过5分钟,然后防火墙限制连接。
有没有办法为http post请求发送保持活动包或者保持连接活着?(如果可能,我需要一个客户端解决方案)
如果你谷歌搜索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。
答案 0 :(得分:-2)
所以恕我直言,你不应该试图保持连接存活这么长时间,特别是如果你不管理你正在使用的网络(即防火墙可能有自己的超时并终止连接),您应该减少服务器响应所需的时间,或使用其他异步通信机制。