Поделиться через


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 помещает в кэш в течение 60 секунд. Каждый раз, когда клиент веб-службы XML выполняет ServiceUsage метод веб-службы XML в течение этого времени, возвращается тот же результат.

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

В ASP.NET 2.0 метод HTTP тестовой страницы был изменен с GET на POST. Однако данные POST обычно не кэшируются. Если задать для тестовой страницы в приложении веб-службы ASP.NET 2.0 использование метода GET, кэширование будет работать должным образом.

Кроме того, протокол HTTP подразумевает, что агент пользователя (браузер или вызывающее приложение) должен иметь возможность переопределять кэширование на сервере путем указания значения "no-cache" для параметра управления кэшем "Cache-Control". Поэтому кэшированные результаты игнорируются приложениями ASP.NET при наличии заголовка "no-cache".

Применяется к