2017-07-20 41 views
0

我有一个包含一个方法的web服务,这是使用CacheDuration缓存:清除web服务的的OutputCache WEBMETHOD

[WebMethod(CacheDuration = 300)] 
public bool CacheTest() 
{ 
    return true; 
} 

后者又称为一个ASP.NET MVC项目:

[HttpGet] 
public IHttpActionResult Test() 
{ 
    var cacheResult = _testWebService.Test(); 
    return Ok(cacheResult.ToString()); 
} 

我希望能够清除CacheTest的缓存,无论是从我的Web服务还是ASP.NET MVC项目中。

但是,我已经研究过使用HttpResponse.RemoveOutputCacheItem,但似乎只清除缓存的Test控制器方法,而不是CacheTest Web服务方法。

我也尝试过使用HttpContext.Current.Cache.Remove(),但我没有用于CacheTest缓存的密钥。

+0

在什么情况下你想清除缓存? – mjwills

+0

@mjwills从两个项目中的另一种方法。浏览器没有缓存结果,即Web服务所在的服务器。 – Chawin

+0

两个项目中的其他方法如何决定缓存应该被清除? – mjwills

回答

1

一种选择是将CacheDuration缩小为CacheTest(比如说10秒)。然后将CacheTest更改为在内部使用MemoryCache,并将缓存持续时间设置为300(因为它现在)。

当您想从缓存中移除一个项目时,将其从MemoryCache中删除。然后,在10秒钟内(或者你设置的CacheDuration)你的网络服务将反映任何最近的变化。

+0

如果'CacheTest'使用参数,'MemoryCache'能够处理吗? – Chawin

+0

是的,你会使用这些参数作为关键的一部分。 – mjwills

+0

我碰巧用另一种方法解决了这个问题,但这只是因为多线程的要求。当我第一次实现它时,这回答了问题并且工作,所以谢谢! – Chawin