gpt4 book ai didi

asp.net - 以编程方式从同一池中的 ASP.NET 应用程序回收池

转载 作者:行者123 更新时间:2023-12-02 21:03:00 24 4
gpt4 key购买 nike

有一个 ASP.net Web 应用程序,它可以正常工作几天,但随后随机抛出一些数据库连接字符串异常,结果表中列出了 0 条记录(应该显示数百条记录)。我花了很多周的时间进行调试,内存很好,数据库存在,并且通过执行任何可能导致应用程序回收的操作来修复它。甚至需要等待很多天才能重现。

所以我在想,既然我知道永远不应该有 0 条记录,我该如何强制运行 Web 应用程序的应用程序池回收(当我收到此数据库异常或 0 条记录时)。至少这样网站就可以为下一个用户工作,而我不必手动重新启动它。

最佳答案

由于其复杂性,而且还因为安全要求不明确,我对这个解决方案一直不太满意(如果您必须为此向应用程序用户授予权限,那么这不仅是另一个配置步骤,而且这也是一个安全风险,而且似乎让应用程序用户有权不加区别地回收应用程序池,尤其是通过网络,可能会在 DOS 攻击中被利用。

在我有限的情况下,我发现了一些关键情况,我能够通过重新启动来解决这些情况并在执行期间检测到,但还无法通过更令人满意的代码更改来阻止,经过大量研究,我经历了其他几个解决方案(好的——黑客)来完成这个任务。 1. 在新生成的线程上引发未处理的异常,2. Environment.Exit(),以及 3. System.Web.HttpRuntime.UnloadAppDomain()。这些具有相当令人讨厌的副作用,即终止所有正在进行的请求,这无疑是一个可怕的黑客攻击,但在某些情况下是可以容忍的(例如发现的条件无论如何都无法正确处理绝大多数请求)。

多年来,我一直对这种黑客行为感到厌恶,直到最近我偶然发现了这个小 gem ,它简单得多并且完全避免了WMI:

System.Web.Hosting.HostingEnvironment.InitiateShutdown();

我的测试表明它完全满足了我的需要,并且我相信这也是您想要的。根据文档,它自 .NET 2.0 以来就已存在,但直到几天前我才在研究中遇到它。

关于asp.net - 以编程方式从同一池中的 ASP.NET 应用程序回收池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645733/

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