2014-09-29 4 views
1

일련의 작업을 수행하는 다중 스레드 작업이 있습니다. 내가 직면하고있는 문제는 무거운 스트레스를받을 때 Timeout을 반환하는 webservice입니다.WebException : 단일 출력 TimeoutExceptions

  • 중단 이전에 불렀다 :

    은 과도한 스트레스 (시간 초과)에서, 나는 기능이

    Try 
    { 
        // Do some actions here 
    } 
    catch(WebException ex) 
    { 
        if (// Timeout) 
        { //Retry } 
        else 
        { // return error } 
    } 
    catch(Exception ex) 
    { //return error } 
    

    MSDN에서 Webexception은 다음과 같은 경우에 발생할 수 있습니다 시도 할 때.

  • 요청의 시간 종료 기간이 만료되었습니다.
  • 요청을 처리하는 동안 오류가 발생했습니다.

질문 : exceptionhandling에서 어떻게 메시지를 사용하지 않고 TimeoutExceptions 아웃이 3 원인과 싱글을 분리해서 할 수 있습니까?

참고 : 나는이 문제를 해결하기 위해 timeout을 증가시킬 수 있음을 알고 있습니다. 그러나 그것은 나의 호기심을 증명하지는 않습니다.

당신은 web request status 코드 중 하나에 비교 Status 속성을 검사 할 수 있습니다 시간

+0

TimeoutException을 제거하려면 catch (TimeoutException ex) {...}을 수행합니다. – bit

답변

1

주셔서 감사합니다 :

try { 

} 
catch(WebException ex) { 
    if (ex.Status == WebExceptionStatus.Timeout) { 
     // Retry logic 
    } 
    else { 
     // return error 
    } 
} 

재시도 논리의 예는 또한 this post 참조하십시오. Timeout은 재시도를 유발해야하는 유일한 이유는 아닙니다 (IMO도 ConnectionFailureConnectionClosed 이상).

+1

멋진 코드 조각을 게시했습니다. 도움이 될 것입니다. 나를 도와 주신 thnx. 'Status' 필드를 놓쳐 야합니다. – User999999

1

예외에 대한 reason이 포함 된 예외의 Status 속성을 살펴볼 수 있습니다.

시간 관련 동작을 사용하고 있으므로 코드에서 일부 테스트를 사용하는 경우 Reactive extensions을 살펴 보는 것이 좋습니다. 원하는 동작을 쉽게 테스트 할 수있는 이벤트 체인을 구성 할 수 있습니다. this question에서 몇 가지 이벤트를 반복하고 싶었던 예를 보려면 오류 발생시 높은 빈도로 관심을 가질 수 있습니다.

+0

우린 충분히 우승을 목표로 삼아 우정 거래를합니다. Interresting read! 가능성을 들여다 보자'Reactive Extensions' – User999999

관련 문제