2017-07-20 43 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