WebMethodAttribute.CacheDuration 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置响应应在缓存中保留的秒数。
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”标头时,会忽略缓存的结果。