キャッシュと条件付き GET の両方をサポートする WCF を使用して REST Web サービスを実装しようとしています。
MSDNの指示に従って基本的なキャッシュを実装しました: Caching Support for WCF Web HTTP Services。これは、[AspNetCacheProfile("MyOutputCacheProfile")]
各 Web メソッドに属性を追加し、適切なエントリを に追加することを意味しますweb.config
。これは正しく動作しているようです。同じ引数が Web メソッドに渡されると、キャッシュされた応答が返されます。
次に、ETag 値を計算し、次のように応答に設定することで、条件付き GET のサポートを追加しました。
WebOperationContext.Current.OutgoingResponse.SetETag(myETag);
そのような動作: ETag
Web メソッドを初めて呼び出したときに、応答にヘッダーが表示されます。
しかし、ここに問題があります。次に同じ引数を使用してその Web メソッドを呼び出すと、キャッシュされた応答が返され、キャッシュされた応答にはETag
ヘッダーが含まれません。(キャッシュの有効期限が切れるまで待つか、キャッシュを完全に無効にすると、ETag ヘッダーが適切に返されます。)
では、キャッシュされた応答にその ETag 値を含める方法はありますか?
更新:さらに調査と実験を行った結果、これを行うと、キャッシュされたすべての応答に ETag ヘッダーが含まれることがわかりました。
HttpContext.Current.Response.Cache.SetETag(myETag);
WebOperationContext...SetETag()
それを呼び出すと、すべてを機能させるために関連する操作を呼び出す必要がなくなります。
これはこれを行う正しい方法ですか?