gpt4 book ai didi

asp.net - 在负载平衡环境中覆盖 HttpContext.Current.Cache。

转载 作者:可可西里 更新时间:2023-11-01 11:28:37 25 4
gpt4 key购买 nike

我们有一个环境,供应商将应用程序部署到其上的多个前端。它大量使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com