2011-01-20 1 views
1

서버에 대한 HTTP 호출을 다시 시도하는 것으로 해결하기 위해이 일반적인 오류가 발생한 WCF 클라이언트가 있습니다. 이 예외의 가치가있는 부분에 대해서는 1 분 이내에 생성되지 않았습니다. 3 초 후에 생성되었습니다.실패 할 경우 어떤 WCF 예외를 다시 시도해야합니까? (예 : 'xxx 호스트가 00:01:00 내에 회신을받지 못했습니다.')

구성 제한 시간 (0시 1분 0초) 내에 회신을받지 못한 을 XXXXXX로 전송 요청 작업. 이 작업에 할당 된 시간은 시간 초과 중 일부 였을 수 있습니다. 서비스가 작업을 계속 처리 중이거나 응답 메시지를 보낼 수 없기 때문일 수 있습니다. 제발 합니다 ( OperationTimeout 속성을 IContextChannel에 채널/프록시 주조 및 설정) 동작 제한 시간을 늘리는 것이 좋습니다 및 서비스가

방법이 처리 전문가 인 클라이언트에게 에 연결할 수 있는지 을 확인 일반적인 WCF 오류? 다른 어떤 가짜 오류를 처리해야합니까?

예를 들어 WCF 호출 타이밍을 고려 중이며 위의 (가짜) 오류가 55 초 이내에 발생하면 전체 작업 (while 루프 사용)을 다시 시도합니다. 전체 채널을 다시 설정해야한다고 생각하지만, 여러분이 옳은 일을 말해 줄 수 있기를 바랍니다.

+0

3 분 후에 1 분 타임 아웃 시간이 초과 된 이유에 대해 별도의 질문을하는 것이 좋습니다. 실제로 작동하는 방식이 아닙니다. –

+0

@ 존 : 그것은 단지 occasionaly 내가 개발하고 내 Azure 패브릭이 시작되기를 기다리는 동안 않습니다. 나는 이것이 재시도 가능한 오류라고 생각하고 있으며, 대부분의 코드는 WCF 샘플에 전적으로 기초하고있다. – LamonteCristo

+0

Azure 요인은 별도의 질문을하기에 좋은 이유입니다. –

답변

1

다른 내가 내 WCF의 모든 예외 및 잠재적 인 은퇴를 처리 문 "을 사용하여"사용자 정의에서 호출합니다. 내 코드는 선택적으로 정책 개체를 문에 전달할 수 있도록 허용하므로 오류가 발생하면 다시 시도하지 않으려는 것처럼 쉽게 동작을 변경할 수 있습니다. 다음과 같이

코드의 요점은 다음과 같습니다

ProxyUsing<IMyService>(myService = GetServiceInstance(),() => 
{ 
    myService.SomeMethod(...); 
}); 

NoInlining 호출이 아마 당신을위한 중요하지 않다 다음과 같은

[MethodImpl(MethodImplOptions.NoInlining)] 
public static void ProxyUsing<T>(ClientBase<T> proxy, Action action) 
    where T : class 
{ 
    try 
    { 
     proxy.Open(); 
     using(OperationContextScope context = new OperationContextScope(proxy.InnerChannel)) 
     { 
      //Add some headers here, or whatever you want 
      action(); 
     } 
    } 
    catch(FaultException fe) 
    { 
     //Handle stuff here 
    } 
    finally 
    { 
     try 
     { 
      if(proxy != null 
       && proxy.State != CommunicationState.Faulted) 
      { 
       proxy.Close(); 
      } 
      else 
      { 
       proxy.Abort(); 
      } 
     } 
     catch 
     { 
      if(proxy != null) 
      { 
       proxy.Abort(); 
      } 
     } 
    } 
} 

당신은 다음 전화를 사용할 수 있습니다. 예외 이후에 호출 스택을 기록하는 사용자 정의 로깅 코드가 있기 때문에 필요합니다.이 경우 해당 메소드 계층 구조를 보존하는 것이 중요합니다.

+0

비록 예외가 잡기에 가치가 있고 어떤 가치있는 상황인지 알기를 희망하지만 도움이된다. – LamonteCristo