在Windows 8上运行,我从IIS的Windows功能安装选项中启用了IIS的Application Initialization功能。
我正在尝试让ASP.NET Web应用程序立即启动,并在重新启动应用程序池时触发Application_Start。我已按照this tutorial中的说明进行操作,但在设置ApplicationHost.config和web.config中的值后,我发现没有任何内容正在触发。
这是我设定的内容(这似乎与文章建议的内容相符):
<applicationPools>
<add name="MPress" autoStart="true"
enable32BitAppOnWin64="true"
startMode="AlwaysRunning">
<processModel identityType="LocalSystem" setProfileEnvironment="true" />
</applicationPools>
<sites>
<site>
<application path="/MPress.Workflow.WebQueueMessageManager"
applicationPool="MPress" preloadEnabled="true">
<virtualDirectory path="/" physicalPath="C:\Projects2010\Clients\MPress\MarvelPress.Workflow.WebQueueMessageManager" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:" />
</bindings>
</site>
</sites>
然后在本地web.config中我有:
<system.webServer>
<applicationInitialization remapManagedRequestsTo="Startup.htm"
skipManagedModules="true"
doAppInitAfterRestart="true">
<add initializationPage="default.aspx" />
</applicationInitialization>
</system.webServer>
除了doAppInitAfterRestart标志外,这与上述文章中的设置完全匹配,只是指向我的虚拟应用和应用程序池。
似乎应用程序池自动加载工作 - 如果我停止并重新启动IIS w3wp,我会在任务列表中看到应用程序池显示。但是使用Process Explorer我可以看到EXE还没有加载.NET就坐在那里。没有加载.NET运行时dll,因此似乎没有触发任何请求。
真正糟糕的是,每个设置都没有关于部分和预期值的真实文档。我无法找到doAppInitAfterRestart标志。我也把结果留下了同样的结果。我也不是100%URL的语法。 MSDN文章指向“/default.aspx”,我也试过这个也无济于事。
我还在IIS中启用了失败请求跟踪,以查看假请求是否可能以某种方式失败,但没有任何内容显示在那里。它只是看起来在重新启动应用程序池时不会触发站点级别加载。
此处提到的所有设置也可以通过Windows 8中的IIS Admin UI获得,一切看起来都是正确的。
我不知道还有什么要检查或者我可能缺少什么。任何想法都赞赏。
答案 0 :(得分:7)
经过更多的探索后,事实证明虽然我使用Windows 8功能安装了应用程序初始化功能,但实际模块未添加到globalModules列表中。
以下内容遗失了,一旦添加,一切都开始正常工作:
<globalModules>
<add name="ApplicationInitializationModule" image="%windir%\System32\inetsrv\warmup.dll" />
</globalModules>
答案 1 :(得分:3)
我遇到了类似的问题,但经过一些比较后,我发现您需要将应用程序池管理的管道模式设置为Integrated
。它不适用于Classic Mode