我们有一个环境,供应商将应用程序部署到其上的多个前端。它大量使用 ASP .Net 存储( session 、应用程序和缓存)。问题是这个环境的负载很快就会让 IIS 无法承受它试图保存在内存中的数据量。
我们尝试采用的解决方案是覆盖存储机制并实现我们自己的。 (具体是一个Redis服务器来管理存储)
我们已经实现了他们的缓存接口(interface),并在 web.config 中设置了 Microsoft.Web.Redis.RedisSessionStateProvider
来管理 session 。那部分一切正常。问题是供应商应用程序内部的缓存并不总是使用他们提供的接口(interface)。反编译 dll 并检查转储文件表明它们有几个直接调用的实例(例如):
HttpContext.Current.Cache.Insert(...)
和 HttpContext.Current.Application[...] = ...
有什么方法可以覆盖 HTTPContext* 调用,以便它们使用 Redis 来缓存而不是 Asp .Net 应用程序存储?
最佳答案
当它是使用 HttpContext.Current 的“第 3”方时,您可能没有机会更改该行为。
这个其他应用程序是否在您的上下文中运行(您是否控制应用程序域)?或者它是一个独立的应用程序? 我曾经尝试更改 HttpContext.Current.Cache 以进行单元测试,但最终模拟了整个 HttpContext,因为它在 Microsoft 堆栈中的某个地方非常内部。
所有这一切都很难做到,不推荐,并且可能导致各种其他错误。 简而言之,不要使用 HttpContext.Current.Cache。使用可以注入(inject)的东西。
一般来说,库不应该使用那个静态上下文。
对这类事情进行抽象+ DI要灵活得多...
对于缓存,您可以使用 CacheManager例如。
关于asp.net - 在负载平衡环境中覆盖 HttpContext.Current.Cache。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841068/