1

次のような WCF Web サービス (Web Api ではない) があります。

public interface ILogsService
{
    [OperationContract]
    [WebInvoke(UriTemplate = "/Find")]
    [Description("-Service description-")]
    FindLogsResult FindLogs(LogsFilterRequest request);
}

HTTP キャッシュ ヘッダーをクライアントに送り返すことによってサービス応答をキャッシュする方法 (またはより良い方法) があるかどうかを知りたいです。

私がテストしたところ、これは次を使用して達成できることがわかりました。

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));

しかし、可能であれば「よりクリーンな」ソリューションが欲しいです。

このサービスはaspNetCompatibilityEnabled="true"常に IIS でホストされています。

4

1 に答える 1

2

メソッドにキャッシュ属性を追加できるはずです。

[AspNetCacheProfile("CacheMediumTerm")]
public FindLogsResult FindLogs(LogsFilterRequest request) {
    //...

次に、構成ファイルで構成できます。

<!-- ...  -->
<system.web>
   <caching>
      <outputCacheSettings>
         <outputCacheProfiles>
            <add name="CacheMediumTerm" duration="120" varyByParam="none" sqlDependency="MyTestDatabase:MyTable"/>
         </outputCacheProfiles>
      </outputCacheSettings>
   </caching>
   <!-- ... -->
</system.web>

この機能の詳細については、次を参照してください。

http://msdn.microsoft.com/en-us/library/ee230443.aspx

于 2012-12-19T20:11:33.393 に答える