簡體   English   中英

通過對等方重置Android到WCF的連接

[英]Android to WCF connection reset by peer

我有使用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方面的搜索問題?

在連接之前嘗試設置HttpURLConnection:

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

您也可以查看此鏈接 Android會維護連接池並首先使用舊的連接池,因此通過設置此屬性,您將禁用默認情況下啟用的keep-alive屬性。

為此,您必須創建RestTemplate HttpComponentsClientHttpRequestFactor

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

檢查此鏈接

還有這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM