asp.net - 如何在 IIS 7.5 上预热 ASP.NET MVC 应用程序?

标签 asp.net entity-framework asp.net-mvc-3 iis warm-up

我们想要预热托管在 IIS 7.5 服务器上的 ASP.NET MVC 应用程序。之前可以在 http://forums.iis.net/t/1176740.aspx 获取预热模块已经被删除了一段时间。

每次 IIS 或 ASP.NET 工作进程因任何原因重新启动时,都应预热应用程序。在预热期间,IIS 应返回一些 HTTP 状态代码,表示其预热状态或无法为任何客户端提供服务。

创建一个通过 HttpRequest 浏览站点中必要页面的可执行文件是一个好主意吗?可执行文件可以从 IProcessHostPreloadClient 实现触发。是否可以配置 IIS,使其只接受来自本地主机的请求,并且一旦可执行文件完成,它可以切换到所有客户端 - 但该切换不应触发 IIS 重新启动(显然)。

是否可以使用 Visual Studio 2010 - Web 性能测试来预热应用程序,而不是创建手动可执行文件?还有其他选择吗?

PS:应用程序使用表单例份验证并使用 session - 因此维护状态 cookie 和其他 cookie 非常重要。

更新 1 - 我们在应用程序中使用 .NET Framework 4.0 和 Entity Framework (数据库优先)。首次访问 EF 查询的速度很慢。热身背后的原因是为了摆脱这些第一次的打击。我们已经在大多数地方使用编译查询,并且我们已经为 EF 实现了预编译 View 。模型和应用程序的规模非常大且复杂。预热需要遍历许多页面,以确保在任何最终用户访问应用程序之前,已编译和未编译的 EF 查询至少执行一次。

最佳答案

微软已经发布了一个模块,它完全可以满足您的要求。 Application Initialization Module for IIS 7.5通过在第一个请求到达之前加载 Web 应用程序来提高网站的响应能力。

您可以指定 IIS 在接受真实用户的请求之前预加载的一系列 URL。我认为您无法获得真正的用户登录体验,但也许您可以设置不需要登录的模拟页面来满足您要求的相同预热?

我认为最引人注目的功能是该模块还支持重叠进程回收。 following tutorial from IIS 8.0包括有关如何实现重叠流程回收的分步方法。

当 IIS 检测到事件工作进程正在被回收时,IIS 不会将事件流量切换到新回收的工作进程,直到新工作进程完成在新进程中运行所有应用程序初始化 URL。这可确保应用程序上线并运行后,浏览您网站的客户不会看到应用程序初始化页面。

此 IIS 应用程序初始化模块内置于 IIS 8.0 中,但为 available for download for IIS 7.5 .

关于asp.net - 如何在 IIS 7.5 上预热 ASP.NET MVC 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387123/

相关文章:

asp.net - IIS(执行此操作时出错)

c# - 工具提示中的 Gridview

ASP.NET:响应中的全局 Hook ?

entity-framework - 更新 Entity Framework 中上次迁移的模型快照并重新应用它

entity-framework - DbEntityEntry.OriginalValues 不填充复杂属性

javascript - 如何访问同一 viewModel 中不同分支的后代?

javascript - 删除代码后 this.form.submit() 仍然会触发

c# - ASP.NET:避免在导航按钮回发时使用 RequiredFieldValidator

c# - 我可以避免 Entity Framework 使用 SQL_VARIANT 来查询吗?

c# - 数据过滤是否发生在 Controller 、服务或存储库层?