2010-11-22 38 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(); 
    } 
} 

執行運行服務方法的回調時會發生異常。有沒有辦法捕捉異常,並檢查它是否是「未修改」響應?

回答

2

在我看來,如果您在服務器上使用非Web WCF綁定,您真的只想在客戶端上使用WCF通道。

在你的情況下,你甚至沒有在服務器上使用.Net,所以我認爲WCF會給你帶來很大的痛苦。

我建議你只需在System.Net中使用HttpWebRequest和HttpWebResponse類。如果你這樣做,你還可以利用WinINet緩存提供的內置緩存。如果您在客戶端Http客戶端中設置緩存策略,您將獲得免費所需的所有緩存行爲。

+0

由於不情願,我部分地接受了你的建議。儘管我正在使用REST入門工具包的HttpClient。 WCF的整個複雜結構對於一個簡單的REST客戶端來說太過矯枉過正,並且隱藏了我所需要的大部分細節。謝謝。 – 2010-11-24 21:16:00