WebMethodAttribute.CacheDuration Özellik

Tanım

Yanıtın önbellekte tutulması gereken saniye sayısını alır veya ayarlar.

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

Özellik Değeri

Yanıtın önbellekte tutulması gereken saniye sayısı. Varsayılan değer 0'dır, yani yanıt önbelleğe alınmaz.

Örnekler

Aşağıdaki örnek, XML Web hizmeti yöntemine yapılan çağrının ServiceUsage sonucunu 60 saniye boyunca önbelleğe yerleştirir. Bir XML Web hizmeti istemcisi bu süre boyunca XML Web hizmeti yöntemini her yürüttüğünde ServiceUsage aynı sonuç döndürülür.

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

Açıklamalar

Önbelleğe alma etkinleştirildiğinde istekler ve yanıtlar en az önbellek süresi boyunca sunucuda bellekte tutulur, bu nedenle isteklerin veya yanıtların çok büyük olmasını veya isteklerin büyük ölçüde değişmesini bekliyorsanız dikkatli olun.

ASP.NET 2.0 Web hizmeti uygulamasında çıktı önbelleğini etkileyebilecek iki sorun vardır.

ASP.NET 2.0'da test sayfasının HTTP yöntemi GET olan POST olarak değiştirilmiştir. Ancak, POST'ler normalde önbelleğe alınmaz. ASP.NET 2.0 Web hizmeti uygulamasındaki test sayfasını GET kullanacak şekilde değiştirirseniz, önbelleğe alma düzgün çalışır.

Buna ek olarak, HTTP bir kullanıcı aracısının (tarayıcı veya çağıran uygulama) "Cache-Control" değerini "önbellek yok" olarak ayarlayarak sunucu önbelleğini geçersiz kılabilmesi gerektiğini belirtir. Bu nedenle ASP.NET uygulamalar bir "önbellek yok" üst bilgisi bulduklarında önbelleğe alınan sonuçları yoksayın.

Şunlara uygulanır