我们有一个环境,供应商将应用程序部署到其上的几个前端。它大量使用ASP .Net存储(会话,应用程序和缓存)。问题在于负载这个环境很快就会让IIS陷入其想要保留在内存中的大量数据。
我们尝试使用的解决方案是覆盖存储机制并实现自己的存储机制。 (特别是用于管理存储的Redis服务器)
我们已经实现了他们的缓存接口,并在web.config中设置Microsoft.Web.Redis.RedisSessionStateProvider
来管理会话。这部分一切正常。问题是供应商应用程序内的缓存并不总是使用他们提供的接口。反编译dll并检查转储文件显示它们有几个直接调用的实例(例如):
HttpContext.Current.Cache.Insert(...)
和HttpContext.Current.Application[...] = ...
我们是否可以覆盖HTTPContext *调用,以便他们使用Redis缓存而不是Asp .Net应用程序存储?
答案 0 :(得分:0)
当它是"第三"使用HttpContext.Current的派对你可能没有机会改变这种行为。
这个其他应用程序是否在您的上下文中运行(您是否控制了应用程序域)。或者它是一个独立的应用程序? 我曾经尝试更改HttpContext.Current.Cache进行单元测试,最后模拟了整个HttpContext,因为它在Microsoft堆栈的某个地方非常内部。
这一切都很难做到,不是真的推荐,可能导致各种其他错误。 简而言之,不要使用HttpContext.Current.Cache。使用你可以注射的东西。
一般来说,图书馆绝不应该使用那种静态背景 对于那些事情,抽象+ DI更加灵活...... 对于缓存,您可以使用CacheManager作为示例。