2010-11-22 14 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クライアントのために過度に過剰なものになり、必要な詳細の多くを隠しました。ありがとう。 –

+0

@Anthonyはい、HttpClientははるかに良い選択肢です。それが私が現在使っているものです。 –

関連する問題