IIS应用程序初始化不会触发ASP.NET应用程序

时间:2013-10-02 08:37:05

标签: asp.net iis

在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获得,一切看起来都是正确的。

我不知道还有什么要检查或者我可能缺少什么。任何想法都赞赏。

2 个答案:

答案 0 :(得分:7)

经过更多的探索后,事实证明虽然我使用Windows 8功能安装了应用程序初始化功能,但实际模块未添加到globalModules列表中。

以下内容遗失了,一旦添加,一切都开始正常工作:

<globalModules>
        <add name="ApplicationInitializationModule" image="%windir%\System32\inetsrv\warmup.dll" />
</globalModules>

答案 1 :(得分:3)

我遇到了类似的问题,但经过一些比较后,我发现您需要将应用程序池管理的管道模式设置为Integrated。它不适用于Classic Mode