Android 到 WCF 连接被对等方重置
Android to WCF connection reset by peer
我有 android 使用 WCF 服务的应用程序,这是我的代码片段 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 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);
}
Check this link
and this one
我有 android 使用 WCF 服务的应用程序,这是我的代码片段 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 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);
}
Check this link
and this one