Android通过对等方重置WCF连接

时间:2018-02-13 13:30:21

标签: java android wcf spring-rest

我有使用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方面搜索问题?

1 个答案:

答案 0 :(得分:1)

在连接之前尝试设置HttpURLConnection:

conn.setRequestProperty("connection", "close");

您也可以查看this link。 Android维护连接池并首先使用旧连接,因此通过设置此属性,您将禁用默认启用的keep-alive属性。

Todo,你必须创建RestTemplate HttpComponentsClientHttpRequestFactor

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

Check this link

and this one