WebMethodAttribute.CacheDuration Propiedad

Definición

Obtiene o establece el número de segundos que la respuesta debe mantenerse en la memoria caché.

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

Valor de propiedad

Número de segundos que la respuesta debe mantenerse en la memoria caché. El valor predeterminado es 0, lo que significa que la respuesta no se almacena en caché.

Ejemplos

En el ejemplo siguiente se coloca el resultado de la llamada al ServiceUsage método de servicio web XML en la memoria caché durante 60 segundos. Cada vez que un cliente de servicio web XML ejecuta el ServiceUsage método de servicio web XML durante ese tiempo, se devuelve el mismo resultado.

<%@ 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

Comentarios

Cuando el almacenamiento en caché está habilitado, las solicitudes y las respuestas se mantienen en memoria en el servidor durante al menos la duración de la caché, por lo que debe usarse precaución si espera que las solicitudes o respuestas sean muy grandes o se espera que las solicitudes varían ampliamente.

Hay dos problemas que pueden afectar al almacenamiento en caché de salida en una aplicación de servicio web de ASP.NET 2.0.

En ASP.NET 2.0, el método HTTP de la página de prueba ha cambiado de GET a POST. Sin embargo, los POST no se almacenan normalmente en caché. Si cambia la página de prueba en una aplicación de servicio web de ASP.NET 2.0 para usar GET, el almacenamiento en caché funciona correctamente.

Además, HTTP indica que un agente de usuario (el explorador o la aplicación que llama) debe poder invalidar el almacenamiento en caché del servidor estableciendo "Cache-Control" en "no-cache". ASP.NET aplicaciones, por lo tanto, omite los resultados almacenados en caché cuando encuentran un encabezado "sin caché".

Se aplica a