如何从.net Web服务设置HTTP缓存控制?

时间:2010-08-04 00:14:43

标签: c# web-services

我有一个遗留的C#Web服务(继承System.Web.Services.WebService的类),其中包含一系列WebMethod,如下所示:

[WebMethod, SoapHeader("header", Direction=SoapHeaderDirection.In)]
[SoapDocumentMethod("http://www.myservices.com/Services/1.1#getMediaMetadata")]
public MediaMetadata getMediaMetadata(string id)
{
    return new MediaService().GetMetadata( id );
}

我正在尝试通过HttpResponse.Cache.SetMaxAge在响应上设置缓存控制标头。执行该服务会产生一个默认标头:

Cache-Control:private, max-age=0

我将标准Cache.SetMaxAge替换为硬编码标头:

HttpContext.Current.Response.AddHeader( "Cache-Control", "private, max-age=" + (int)ttl.TotalSeconds );

然而,Web服务器仍然使用默认的Cache-Control进行响应。我怀疑ASP.NET Web服务在执行Web方法之后就搞砸了。以下建议使用WebMethod的CacheDuration属性不适用于我的场景。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

[WebMethod(CacheDuration=60), SoapHeader("header", Direction = SoapHeaderDirection.In)] 
SoapDocumentMethod("http://www.myservices.com/Services/1.1#getMediaMetadata")]   
public MediaMetadata getMediaMetadata(string id)   
{   
    return new MediaService().GetMetadata( id );   
} 

将此属性添加到您应该做的技巧。

如果您特别想要访问上下文,那么

Context.Response.Cache.SetMaxAge(TimeSpan.FromSeconds(60));

除非它为空,否则您可以安全地访问上下文。一个简单的检查将为您解决此问题