我有使用 WCF 服务的 Android 应用程序,这是来自 AsyncTask
的代码 fragment :
private HttpEntity<HashMap> request(){
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Cookie", LocalData.Web.getCookie(this.context));
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
HttpEntity<HashMap> requestDataEntity = new HttpEntity<>(request, requestHeaders);
HttpEntity<HashMap> response = restTemplate.exchange(this.url, this.httpMethod, requestDataEntity, HashMap.class);
// HttpHeaders headers = response.getHeaders();
// LocalData.Web.storeCookie(headers, context);
return response;
}
@Override
protected HashMap doInBackground(Void... voids) {
try{
return request().getBody();
}
catch (Exception e){
Log.e("error", e.getMessage());
return null;
}
}
主要是它正确连接到该服务,但有时会出现一些异常,获取此消息:
I/O error: recvfrom failed: ECONNRESET (Connection reset by peer); nested exception is java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
什么可能导致此错误?
注意:
以前一直工作得很好,但是现在我经常遇到这个问题。是android问题还是我在WCF端搜索问题?
最佳答案
在连接之前尝试设置 HttpURLConnection:
conn.setRequestProperty("connection", "close");
您也可以看看this link 。 Android 维护连接池并首先使用旧的连接池,因此通过设置此属性,您将禁用默认情况下启用的 keep-alive
属性。
为此,您必须创建 RestTemplate
HttpComponentsClientHttpRequestFactor
@Bean
RestTemplate restTemplate(SimpleClientHttpRequestFactory factory) {
return new RestTemplate(factory);
}
关于java - Android 到 WCF 连接被对等方重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48767986/