【问题标题】:How to Gracefully Shut Down ASP.Net (not Core)如何优雅地关闭 ASP.Net(非核心)
【发布时间】:2021-03-31 14:54:45
【问题描述】:

我有一个托管在 IIS 中的 WCF 服务应用程序。启动时,它从 web.config 读取 SQL 连接信息并连接到 SQL Server 以获取引导应用程序所需的信息。如果 SQL Server 由于某种原因不可用,我们希望服务关闭 - 我目前通过抛出异常来实现。

我们遇到的问题是,如果服务无法启动超过 N 次,IIS 会帮助关闭应用程序池 - 这意味着,在 SQL Server 连接问题得到纠正后(可能完全在 IIS 外部)服务器),系统管理员必须考虑重新打开应用程序池。

我想做的是让服务优雅地退出。我知道使用 ASP.Net Core 有办法做到这一点(即,连接到进程的生命周期管理并告诉它退出的方法),但一直无法为 .Net Framework/ASP 找到类似的东西。网。

有没有这样的 API 可以使用?

【问题讨论】:

  • 您想关闭服务...但不想停止应用程序池?我对你在这里想要完成的事情感到困惑。
  • 当前,来电,IIS启动服务,连接数据库失败,启动失败。如果检测到这一点的速度足够快,并且根本问题(如 SQL Server 关闭)得到了修复,那么下一次调用进来并且 IIS 启动服务时,它将正常启动。但是,如果它连续失败 N 次以上,IIS 将禁用应用程序池 - 因此即使 SQL Server 连接问题得到修复,该服务也不会启动,直到有人手动重新启动应用程序池。所以,我需要一种方法来让服务在不出错的情况下无法启动。
  • 在这种情况下,服务 = 应用程序池。因此,如果您不希望它停止尝试启动,那么您需要disable IIS rapid fail protection
  • 一个应用程序池可以托管多个服务,因此不存在一对一的等效性。您似乎在暗示它无法启动应用程序池,而不是应用程序?
  • 然后停止让您的应用程序无法启动。将其包装在重试策略中,以便它不断重试。或者使它成为一个异步进程,并且任何依赖于该进程的代码在使用它之前等待该进程完成。如果您不想禁用快速故障保护(这是让您的应用在多次失败后无法启动的原因),那么您需要让您的应用不会启动失败。你不能同时拥有它。

标签: c# asp.net wcf


【解决方案1】:
猜你喜欢
  • 2020-02-13
  • 2014-12-01
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 2015-06-25
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多