首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在IIS7.5上预热ASP.NET MVC应用程序?

如何在IIS7.5上预热ASP.NET MVC应用程序?
EN

Stack Overflow用户
提问于 2011-09-12 19:25:59
回答 3查看 17.7K关注 0票数 18

我们希望预热托管在IIS7.5服务器上的ASP.NET MVC应用程序。曾经在http://forums.iis.net/t/1176740.aspx提供的预热模块已经被移除。

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

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

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

PS:应用程序使用表单身份验证和会话-因此维护状态cookie和其他cookie很重要。

更新1-我们在应用程序中使用.NET Framework4.0和实体框架(首先是数据库)。对EF查询的第一次命中速度很慢。热身背后的原因是为了让这些第一次命中的方式。我们已经在大多数地方使用了编译的查询,并且我们已经为EF实现了预编译的视图。模型和应用程序的规模非常大和复杂。预热需要遍历多个页面,以确保在任何最终用户访问应用程序之前,至少执行一次编译和非编译的EF查询。

EN

回答 3

Stack Overflow用户

发布于 2012-09-21 04:52:54

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

您可以指定一系列Urls,IIS将在接受来自真实用户的请求之前预加载这些Urls。我不认为你可以得到一个真正的用户登录体验,但也许你可以建立一个模拟的页面,不需要登录,满足你所要求的相同的预热?

我认为最引人注目的特性是,这个模块还支持重叠的进程回收。following tutorial from IIS 8.0包括一种关于如何启用重叠进程回收的分步方法。

当IIS检测到正在回收活动的工作进程时,IIS不会将活动通信切换到新的回收的工作进程,直到新的工作进程完成在新进程中运行所有应用程序初始化Urls。这可以确保浏览您网站的客户在应用程序处于活动和运行状态时不会看到应用程序初始化页面。

此IIS应用程序初始化模块内置于IIS8.0中,但它是available for download for IIS 7.5

票数 12
EN

Stack Overflow用户

发布于 2011-09-12 20:04:19

您可以查看IIS7.5和ASP.NET 4.0中内置的自动启动功能的following post

票数 10
EN

Stack Overflow用户

发布于 2011-09-12 20:04:54

任何为宿主资源生成服务器请求的应用程序都可用于预热IIS进程。你到底需要多少请求取决于哪些部分需要预热。通常,预热用于:

  • 正在启动工作进程。为此,您只需请求一个资源,即可为整个application.
  • Perform预热一个进程,包括任何静态初始化、数据库启动或预缓存。在第一次请求时,您在Global.asax文件中所做的任何操作都会发生,因此,如果您能够完成所有的初始化操作,那么您仍然只需要发出一个页面请求。
  • 强制预编译ASP.NET页面。要做到这一点,你需要点击每一个页面。幸运的是,这通常不是很大的时间成本,所以您可能不需要担心它。如果确实有个别页面加载较慢,则可以分别对其进行预热。

这里的“热身”过程并没有什么神奇之处。您只需要强制IIS提供有问题的URL。你提到的一切都可以做到这一点:使用压力测试工具查询网址,编写自定义实用程序来post HTTP请求,甚至只需编写一个像“wget”这样的工具或PowerShell脚本来下载网址就可以了。

就限制对本地主机的访问而言,据我所知,在IIS中,更改需要重新启动IIS的唯一方法。您可以始终在应用程序中构建一个预请求钩子,并在那里维护状态,并让您的预热过程查询一些特定的URL,该URL将状态切换为“打开”。但我不确定你会完成什么。如果,不知何故,用户在您的预热完成之前尝试查询您的站点,所发生的一切就是您的站点需要很长时间才能做出响应,那么他们最终会得到他们所请求的页面。如果你在预热时将他们锁在网站之外,他们会得到一个浏览器网络错误,声称网站处于离线状态,这(在我看来)听起来要糟糕得多。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7387123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档