19

我正在尝试使用 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 错误,因为初始化不应该是错误条件。

我需要的

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

有什么我想念的吗?我能做到这一点吗?

谢谢您的帮助!

4

1 回答 1

28

我想我回答了我自己的问题。我删除了该skipManagedModules属性并且它起作用了。这段代码完成了应用程序的初始化,并且在预热期间,请求似乎在等待它完成后才被处理:

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

我找不到任何文档说明为什么它会以这种方式运行,也不真正理解这skipManagedModules意味着什么。如果有人可以进一步解释这一点,我可以将解释标记为答案。谢谢!

于 2013-03-12T17:08:48.537 回答