2017-03-16 77 views
0

我們有一個供應商部署的應用程序的環境,它的幾個前端。它大量使用ASP .Net存儲(會話,應用程序和緩存)。問題在於,這個環境很快將IIS帶入了它試圖保留在內存中的數據量。在負載均衡環境中重寫HttpContext.Current.Cache。

我們正試圖解決的解決方案是重寫存儲機制並實現我們自己的解決方案。 (特別是Redis服務器來管理存儲)

我們已經實現了它們的緩存接口並在web.config中設置了Microsoft.Web.Redis.RedisSessionStateProvider來管理會話。這部分工作正常。問題在於供應商應用程序內的緩存並不總是使用他們提供的接口。反編譯的DLL和檢查轉儲文件表明,有他們的幾個實例直接調用(例如): HttpContext.Current.Cache.Insert(...)HttpContext.Current.Application[...] = ...

有什麼辦法,我們可以覆蓋的HttpContext *電話,這樣他們就會使用Redis的緩存而不是Asp .Net應用程序存儲?

回答

0

當它是使用HttpContext.Current的「第三方」時,您可能沒有機會改變該行爲。

這個其他應用程序是否在您的上下文中運行(您是否控制應用程序域)。還是它是一個獨立的應用程序? 我曾嘗試更改HttpContext.Current.Cache進行單元測試,並最終嘲笑整個HttpContext,因爲它在Microsoft堆棧中非常內部。

這一切都很難做,不是真的推薦,並可能導致各種其他的錯誤。 總之,不要使用HttpContext.Current.Cache。使用你可以注射的東西。

通常,庫不應該使用該靜態上下文。
對於這些事物,抽象+ DI更靈活...... 對於緩存,例如可以使用CacheManager