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. Тем не менее, POS-запросы обычно не кэшируются. Если изменить тестовую страницу в приложении веб-службы ASP.NET 2.0, чтобы использовать GET, кэширование работает правильно.
Кроме того, HTTP указывает, что агент пользователя (браузер или вызывающее приложение) должен иметь возможность переопределить кэширование сервера, установив для параметра Cache-Control значение "Без кэша". ASP.NET приложения, поэтому игнорируйте кэшированные результаты при поиске заголовка "без кэша".