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 属性。

要做到这一点,您必须创建 RestTemplateHttpComponentsClientHttpRequestFactor

@Bean
RestTemplate restTemplate(SimpleClientHttpRequestFactory factory) {
   return new RestTemplate(factory);
}

Check this link

and this one