2010-11-22 1 views
1

필자는 Perl 기반 REST 서비스를 사용하고 있으며 C# 및 WCF를 사용하여 클라이언트가 서비스와 통신하도록합니다. 비싼 전화가 몇 개있어서 캐싱 시스템을 만들고 싶습니다. 캐시 된 데이터의 최신 버전이 서버에 있는지 확인하고 확인하는 기능이 필요합니다. 나는 표준 "If-Modified-Since"요청 헤더와 "304 Not Modified"응답 상태 코드를 사용하려고했지만 응답에 던져진 예외를 잡는 데 문제가 있습니다.WCF, REST 및 표준 HTTP 헤더를 사용하여 클라이언트 측 캐시 구현

내 클라이언트 클래스는 ClientBase <>에서 파생됩니다. 서비스 메서드를 호출하는 데 사용하는 메서드는 다음과 같습니다.

private T RunMethod<T>(ReqHeaderType reqHeaders, ResHeaderType resHeaders, Func<T> meth) 
{ 
    //Get request and response headers 
    var reqProp = GetReqHeaders(reqHeaders); 
    var resProp = GetResHeaders(resHeaders); 

    using (var scope = new OperationContextScope(this.InnerChannel)) 
    { 
     //Set headers 
     OperationContext 
      .Current 
      .OutgoingMessageProperties[HttpRequestMessageProperty.Name] = reqProp; 
     OperationContext 
      .Current 
      .OutgoingMessageProperties[HttpResponseMessageProperty.Name] = resProp; 

     //Return the result of the call 
     return meth(); 
    } 
} 

서비스 메서드를 실행하는 콜백이 실행될 때 예외가 발생합니다. 예외를 잡아서 "Not Modified"응답인지 확인하는 방법이 있습니까?

답변

2

서버에서 웹 이외의 WCF 바인딩을 사용하는 경우 실제로는 클라이언트에서만 WCF 채널을 사용하려고합니다.

귀하의 경우에는 서버에서 .Net을 사용하지 않으므로 WCF가 당신에게 많은 고통을 줄 것이라고 생각합니다.

System.Net에서 HttpWebRequest 및 HttpWebResponse 클래스를 사용하는 것이 좋습니다. 그렇게하면 WinINet 캐시가 제공하는 내장 된 캐싱을 활용할 수도 있습니다. 클라이언트 Http 클라이언트에서 캐싱 정책을 설정하면 필요한 캐싱 동작을 모두 무료로 얻을 수 있습니다.

+0

나는 주저하면서 부분적으로 조언을 듣고 있습니다. 내가 REST 스타터 키트의 HttpClient를 사용하고 있지만. WCF의 전체 복잡한 구조는 간단한 REST 클라이언트에 대한 과도한 부담이었습니다. 필요한 많은 세부 정보를 숨겼습니다. 감사. –

+0

@Anthony 네, HttpClient가 훨씬 더 좋은 선택입니다. 그것이 내가 현재 사용하고있는 것입니다. –

관련 문제