如何:对 Web 服务启用服务器端输出缓存

下面的代码示例演示如何对 Web 服务方法使用 CacheDuration 属性,以便指定持续时间为 60 秒的输出缓存。 此示例阐释了使用 ASP.NET 创建的 XML Web services 的设计准则主题中阐述的准则之一。

有两个问题可以影响 ASP.NET 2.0 Web 服务应用程序中的输出缓存。

在 ASP.NET 2.0 中,测试页的 HTTP 方法已从 GET 更改为 POST。 但是 POST 通常不进行缓存。 如果在 ASP.NET 2.0 Web 服务应用程序的测试页中改为使用 GET,缓存将正常工作。

此外,HTTP 指示用户代理(浏览器或调用应用程序)应该可以通过将“Cache-Control”设置为“no-cache”以重写服务器缓存。 因此,当 ASP.NET 应用程序找到“no-cache”标头时,会忽略缓存的结果。

示例

<%@ WebService Language="C#" Class="MathService" %>
using System;
using System.Web.Services;
public class MathService : WebService {
   [WebMethod(CacheDuration=60)]
   public float Add(float a, float b)
   {
       return a + b;
   }
   [WebMethod(CacheDuration=60)]
   public float Subtract(float a, float b)
   {
       return a - b;
   }
   [WebMethod(CacheDuration=60)]
   public float Multiply(float a, float b)
   {
       return a * b;
   }
   [WebMethod(CacheDuration=60)]
   public float Divide(float a, float b)
   {
       if (b==0) return -1;
       return a / b;
   }
}  
<%@ WebService Language="VB" Class="MathService" %>
Imports System
Imports System.Web.Services
Public Class MathService
    Inherits WebService 
    <WebMethod(CacheDuration := 60)> _
    Public Function Add(a As Single, b As Single) As Single
        Return a + b
    End Function

    <WebMethod(CacheDuration := 60)> _
    Public Function Subtract(a As Single, b As Single) As Single
        Return a - b
    End Function

    <WebMethod(CacheDuration := 60)> _
    Public Function Multiply(a As Single, b As Single) As Single
        Return a * b
    End Function

    <WebMethod(CacheDuration := 60)> _
    Public Function Divide(a As Single, b As Single) As Single
        If b = 0 Then
            Return - 1
        End If
        Return a / b
    End Function
End Class

请参见

任务

如何:启用 Web 服务客户端上的输出缓存

概念

使用 ASP.NET 创建的 XML Web services 的设计准则

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。