我有一个传统的C#Web服务(类继承System.Web.Services.WebService
),象这样一系列的WebMethods的:如何从.net Web服务设置HTTP缓存控制?
[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);
}
我试图设置Cache-Control头经由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响应。我怀疑在web方法执行后,ASP.NET web服务正在使用这种方法。以下建议使用WebMethod的CacheDuration属性不适用于我的方案。
有什么建议吗?
我现在怀疑问题在于客户端发布到web方法的事实,并且HTTP规范说Cache-Control在POST上是不相关的。显然asp.net忽略了SetMaxAge的调用。 – 2010-08-31 21:16:46