我有一个遗留的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属性不适用于我的场景。
有什么建议吗?
答案 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));
除非它为空,否则您可以安全地访问上下文。一个简单的检查将为您解决此问题