WebMethodAttribute.CacheDuration プロパティ

定義

応答をキャッシュ内に保持する秒数を取得または設定します。

public:
 property int CacheDuration { int get(); void set(int value); };
public int CacheDuration { get; set; }
member this.CacheDuration : int with get, set
Public Property CacheDuration As Integer

プロパティ値

応答をキャッシュ内に保持する秒数。 既定値は 0 です。応答がキャッシュされていないことを示します。

次の例では、XML Web サービス メソッドの ServiceUsage 呼び出しの結果を 60 秒間キャッシュに配置します。 その間に XML Web サービス クライアントが XML Web サービス メソッドを ServiceUsage 実行するたびに、同じ結果が返されます。

<%@ WebService Language="C#" Class="Counter" %>

using System.Web.Services;
using System;
using System.Web;

public class Counter : WebService {
     
     [ WebMethod(Description="Number of times this service has been accessed",
     CacheDuration=60,MessageName="ServiceUsage") ]
     public int ServiceUsage() {
          // If the XML Web service has not been accessed, initialize it to 1.
          if (Application["MyServiceUsage"] == null) {
              Application["MyServiceUsage"] = 1;
          }
          else {
              // Increment the usage count.
              Application["MyServiceUsage"] = ((int) Application["MyServiceUsage"]) + 1;
          }

          // Return the usage count.     
          return  (int) Application["MyServiceUsage"];
     }
}
<%@ WebService Language="VB" Class="Counter" %>

Imports System.Web.Services
Imports System
Imports System.Web

Public Class Counter
    Inherits WebService  

    <WebMethod(Description := "Number of times this service has been accessed", _
        CacheDuration := 60, _
        MessageName := "ServiceUsage")> _
    Public Function ServiceUsage() As Integer
        
        ' If the XML Web service has not been accessed, initialize it to 1.
        If Application("MyServiceUsage") Is Nothing Then
            Application("MyServiceUsage") = 1
        Else
            ' Increment the usage count.
            Application("MyServiceUsage") = CInt(Application("MyServiceUsage")) + 1
        End If
        
        ' Return the usage count.
        Return CInt(Application("MyServiceUsage"))
    End Function
End Class

注釈

キャッシュが有効になっている場合、要求と応答は少なくともキャッシュ期間のためにサーバー上のメモリに保持されるため、要求または応答が非常に大きいと予想される場合や、要求が大きく異なると予想される場合は注意が必要です。

ASP.NET 2.0 Web サービス アプリケーションの出力キャッシュに影響を及ぼす可能性がある問題が 2 つあります。

ASP.NET 2.0 では、テスト ページの HTTP メソッドが GET から POST に変更されました。 しかし、通常、POST はキャッシュされません。 GET を使用するように ASP.NET 2.0 Web サービス アプリケーションのテスト ページを変更すれば、キャッシュは正常に動作します。

また、HTTP では、ユーザー エージェント (ブラウザーまたは呼び出し元アプリケーション) で、"Cache-Control" を "no-cache" に設定することによってサーバーのキャッシュ機能をオーバーライドできる必要があることが示されています。 このため ASP.NET アプリケーションでは、"no-cache" ヘッダーを見つけた場合に、キャッシュされた結果を無視します。

適用対象