【发布时间】:2012-05-20 11:44:02
【问题描述】:
我有一个接受 XML POST 方法的网络服务。它工作正常,然后在某些随机情况下,它无法与服务器通信,并使用消息The target server failed to respond 抛出 IOException。随后的调用工作正常。
这主要发生在我拨打一些电话然后让我的应用程序空闲 10-15 分钟时。之后我进行的第一次调用会返回此错误。
我尝试了几件事......
我像这样设置重试处理程序
HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {
public boolean retryRequest(IOException e, int retryCount, HttpContext httpCtx) {
if (retryCount >= 3){
Logger.warn(CALLER, "Maximum tries reached, exception would be thrown to outer block");
return false;
}
if (e instanceof org.apache.http.NoHttpResponseException){
Logger.warn(CALLER, "No response from server on "+retryCount+" call");
return true;
}
return false;
}
};
httpPost.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryHandler);
但是这个重试从来没有被调用过。 (是的,我正在使用正确的 instanceof 子句)。在调试此类时永远不会被调用。
我什至尝试设置HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false);,但没有用。有人可以建议我现在能做什么吗?
重要 除了弄清楚我为什么会出现异常之外,我最关心的一个问题是为什么 retryhandler 不在这里工作?
【问题讨论】:
-
我认为这与客户端代码无关。可能是目标服务器忙于处理响应?
-
我尝试 fiddler 轰炸目标服务器,但效果很好。我什至尝试使用 fiddler 执行相同的步骤来重现错误,但没有运气!
-
什么样的网络服务器在运行服务,在这10-15分钟的等待时间里,服务是在收到其他请求,还是服务空闲?
-
Tomcat。不,它是一个模拟服务自动取款机,除了我的电话,它什么也没有收到。
-
我也收到此错误,但在 ResourceAccessException 的包装中。
标签: java httpclient