IIS 7.5应用初始化对于ASP.NET Web服务的预热,无需重新映射请求。

20

我正在尝试使用IIS 7.5应用程序初始化扩展来配置我的Web应用程序的预热过程。这是我采取的一种方法,以最小化应用程序池回收引起的减速问题,这在Stack Overflow的其他问题中已经很好地解释了。

我想要的是,获得应用程序初始化的好处,而不需要将请求重新映射到其他地方。

到目前为止我所做的事情

我按照IIS 8说明书的基本用例进行操作,效果非常好!我创建了一个名为app_starting.htm的启动页面,通过使用此代码,在应用程序初始化时显示该页面:

<applicationInitialization remapManagedRequestsTo="app_starting.htm" skipManagedModules="true" >
    <add initializationPage="/" />
</applicationInitialization>

为什么这不好

我想使用初始化来加快使用ASP.NET MVC编写的REST基础Web服务的请求。这个Web服务是多个应用程序的后端。当它们请求一个资源(例如:/client/1/addresses)时,他们无法处理接收到闪屏页面。

我尝试过的

我删除了remapManagedRequestsTo属性。但是,现在当我在初始化期间请求资源时,我会收到500错误,直到初始化完成后,响应恢复正常。依赖于此服务的应用程序也不会对500错误做出良好的响应,因为初始化不应该是错误条件。

我需要什么

在不执行任何重新映射的情况下,我希望请求行为恢复正常。即使正在进行初始化,其他对该应用程序的请求应该排队等待直到初始化完成后再处理。

我有什么遗漏吗? 我能实现这个吗?

感谢您的帮助!

1个回答

29

我想我自己回答了我的问题。我删除了 skipManagedModules 属性并成功解决了问题。这段代码实现了应用程序初始化,在预热期间,请求似乎会在处理之前等待其完成:

<applicationInitialization>
    <add initializationPage="/" />
</applicationInitialization>

我找不到关于它为什么会这样的文档,也不太理解 skipManagedModules 是什么意思。如果有人能进一步解释一下,我可以把解释标记为答案。谢谢!


1
Jason,我想知道你在使用哪个版本的Windows?我正在尝试在2008 r2 / IIS 7.5上设置应用程序初始化,但遇到了很多问题。谢谢! - RobRolls
这正是我正在使用的!我还在我的Win7 x64工作站上为开发配置了它。你安装了扩展程序吗? IIS 8自带此功能,但必须在7.5上安装。 - Jason
我遇到了一些问题。在扩展程序安装后,应用程序的 applicationHost.config 缺少模块,并且我们正在运行 SSL。我仍在解决 SSL 问题。如果我使用的是 IIS 8,这一切都会更容易,但不幸的是那不是一个选择。 - RobRolls
1
好的,是的,安装过程中没有配置applicationHost.config。关于SSL,我们也使用它,但我不使用“Require SSL”标志。相反,我使用URL Rewrite将所有请求重定向到HTTPS,除了本地主机请求。然后我就可以正确地启动本地预热了... - Jason
这段代码的意思是当你启动某个网站时,它会自动发送请求到“/”吗?也就是说第一个请求会自动发送?因为这正是我想要的,我不想等待用户发送第一个请求或者IIS循环时间结束。 - qakmak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接