我有使用WCF服务的android应用程序,这是AsyncTask
的代码片段:
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错误:recvfrom失败:ECONNRESET(由对等方重置连接); 嵌套异常是java.net.SocketException:recvfrom失败: ECONNRESET(由对等方重置连接)
可能导致此错误的原因是什么?
注意:
它工作时间很长,但现在我经常遇到这个问题。这是一个Android问题还是我会在WCF方面搜索问题?
答案 0 :(得分:1)
在连接之前尝试设置HttpURLConnection:
conn.setRequestProperty("connection", "close");
您也可以查看this link。 Android维护连接池并首先使用旧连接,因此通过设置此属性,您将禁用默认启用的keep-alive
属性。
Todo,你必须创建RestTemplate
HttpComponentsClientHttpRequestFactor
@Bean
RestTemplate restTemplate(SimpleClientHttpRequestFactory factory) {
return new RestTemplate(factory);
}