gpt4 book ai didi

c# - 在类型初始值设定项/静态构造函数异常时重新启动 IIS AppDomain

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:00 25 4
gpt4 key购买 nike

我有一个 ASP.NET 依赖于一些使用静态构造函数的代码。这些类型初始值设定项中的代码有时会失败。为了便于讨论,假设代码是:

public static readonly string Thing = SomeSpecialCallThatRarelyFails();

也许这很卑鄙,但这是无法改变的。这种代码存在于每个 Controller 中,因此 ASP.NET 无法创建 Controller ,只能停在那里,直到有人过来重新启动它。

我知道这是应该的方式,因为问题很可能是非暂时性的,自动重启会造成循环。或者也许只有一个 Controller 出现故障,所以该应用程序仍然存在。所以我得到默认行为只是继续返回错误。但在这种特殊情况下,让我们假装最好的办法是注意到此故障并重新启动。

如何自动检测这种情况并触发 IIS 应用程序池/AppDomain 的重启或回收?

我注意到,如果我在 Application_Start 上引发异常,应用程序将自动重启。因此,一种方法是遍历所有类型并尝试访问它们。如果他们有 .cctor 失败,那么我将崩溃 Application_Start 并且 ASP.NET 将重新启动。但这非常 hacky,而且如果实际请求代码引用了另一种我不知道会抛出 .cctor 的类型,它也无济于事。

有没有更好的方法?我是否应该编写 Web API 过滤器并查找 TypeInitializerException 或其他东西?

最佳答案

只是一个想法。 “罕见故障”是确定性的吗?是否可以通过增加重试逻辑来解决?

public static readonly string Thing = RetrySpecialCall();

private static string RetrySpecialCall()
{
while (true)
{
try
{
return SomeSpecialCallThatRarelyFails();
}
catch (Exception) {}
}
}

关于c# - 在类型初始值设定项/静态构造函数异常时重新启动 IIS AppDomain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31037371/

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