12

在 Windows 8 上运行,我从 IIS 的 Windows 功能安装选项中启用了 IIS的应用程序初始化功能。

我试图让 ASP.NET Web 应用程序立即启动并在应用程序池重新启动时触发 Application_Start。我已按照本教程中的说明进行操作,但在 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 中打开了 Failed Request Tracing 以查看假请求是否以某种方式失败,但那里没有任何显示。当应用程序池重新启动时,看起来站点级负载没有触发。

此处提到的所有设置也可通过 Windows 8 中的 IIS Admin UI 获得,并且一切看起来都正确。

我不知道还要检查什么或我可能会丢失什么。任何想法表示赞赏。

4

2 回答 2

9

经过一番探索后发现,虽然我已经使用 Windows 8 功能安装了应用程序初始化功能,但实际模块并未添加到 globalModules 列表中。

缺少以下内容,添加后一切都开始正常工作:

<globalModules>
        <add name="ApplicationInitializationModule" image="%windir%\System32\inetsrv\warmup.dll" />
</globalModules>
于 2013-10-02T09:10:42.480 回答
4

我遇到了类似的问题,但经过一番比较后,我发现您需要将 Application Pool Managed Pipeline Mode 设置为Integrated. 它不适用于Classic Mode

于 2013-12-17T07:40:25.507 回答