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,表示不缓存响应。

示例

以下示例将调用 ServiceUsage XML Web 服务方法的结果置于缓存中 60 秒。 每当 XML Web 服务客户端在此期间执行 ServiceUsage XML Web 服务方法时,将返回相同的结果。

<%@ 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 服务应用程序中的输出缓存。

在 ASP.NET 2.0 中,测试页的 HTTP 方法已从 GET 更改为 POST。 但是 POST 通常不进行缓存。 如果在 ASP.NET 2.0 Web 服务应用程序的测试页中改为使用 GET,缓存将正常工作。

此外,HTTP 指示用户代理(浏览器或调用应用程序)应该可以通过将“Cache-Control”设置为“no-cache”以重写服务器缓存。 因此,当 ASP.NET 应用程序找到“no-cache”标头时,会忽略缓存的结果。

适用于