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".