有人知道使用 ASP.NET 方法 Application_Start 进行应用程序预热有任何反对意见吗?
特别是对于 Web 服务,通常需要预加载文件、缓存算法等。
存在:
- Service Auto Start Providers, serviceAutoStartProvider, https://weblogs.asp.net/scottgu/auto-start-asp-net-applications-vs-2010-and-net-4-0-series,我们需要的地方:
serviceAutoStartProvider
用具体的程序集名称注册新的。- 分配
serviceAutoStartProvider
给 IIS 应用程序。 - 将 IIS 应用程序配置为 AlwaysRunning。
- IIS 8.0 应用程序初始化,https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-application-initialization
- 分配
initializationPage
给 IIS 应用程序。 - 将 IIS 应用程序配置为 AlwaysRunning。
- 分配
但是,这两种方法都需要更改每个应用程序的 IIS 配置,这在多对多应用程序的情况下会让人不舒服,并且在发布时有额外的风险。
根据IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述:
ASP.NET 在应用程序域的生命周期内调用它们(Application_Start 和 Application_End)一次,而不是针对每个 HttpApplication 实例。
因此,Application_Start 似乎是热身代码的好地方,例如:
protected void Application_Start(object sender, EventArgs e)
{
Task.Run(WarmUpBackend);
}
它只需要将 IIS App 配置为AlwaysRunning。在其中WarmUpBackend
,我们可以预加载 Web 服务所需的一切。