2014-11-08 5 views
0

실패한 것으로 예상되는 대상 서버 집합에 도달하지 못한 다운로드 시도 만 재 시도하려고합니다. 다른 실패한 시도를 다시 시도하는 것은 각 요청에 대해 nonce가 증가하기 때문에 시간 낭비 일뿐입니다.다시 시도 작업이 시간 초과되었거나 예기치 않게 연결이 닫혔습니다.

이 설명 된대로 아마 일하는 것이 내 간단한 다운로드 방법 :

public string Download(string url) 
{ 
    bool retried = false; 
    retry: 
    try 
    { 
     HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url); 
     using (StreamReader reader = new StreamReader(webrequest.GetResponse().GetResponseStream())) 
     { 
      return reader.ReadToEnd(); 
     } 
    } 
    catch (WebException e) 
    { 
     if (e.Message == "The operation has timed out" || e.Message == "The connection was closed unexpectedly") 
     { 
      if (!retried) 
      { 
       retried = true; 
       goto retry; 
      } 
     } 
    } 
    return ""; 
} 

문제가 e.Message가 localizated된다는 점이다. 따라서 if (e.Message == "language 1" || e.Message == "language 2" || e.Message == "language 3" || ...)을 사용해야합니다.

The operation has timed out 또는 The connection was closed unexpectedly에서만 다시 시도하는 더 세련된 방법이 있습니까? 또는 아직 대상 서버에 도달하지 않았을 가능성이있는 요청에 대해서만 다시 시도 하시겠습니까? 감사! 경우

+0

내가 당신에게 당신이 필요로하는 정보를 제공 할 것'HResult' 또는 WebException이 객체의'Status' 속성 중 하나를 기대 값. –

+0

유망 해 보입니다. 나는 그것을 시험 할 것이다. 제안에 감사드립니다. – LukAss741

답변

1

확인 : 당신은 모든 WebExceptionStatus을 볼 수 있습니다

e.Status == WebExceptionStatus.Timeout || e.Status == WebExceptionStatus.KeepAliveFailure 

here

관련 문제