5

我想知道如何为下一个要求设置 IIS 或应用程序(如果需要): - 当应用程序池在 IIS 中启动时,它应该调用 Global.asax 中的 Application_Start

我正在使用 applicationHost.config 获取以下代码:

<applicationPools>
        <add name="mySite" autoStart="true" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
        <applicationPoolDefaults>
            <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="false" />
        </applicationPoolDefaults>
    </applicationPools>

. .

 <site name="mySite" id="2" serverAutoStart="true">
            <application path="/" serviceAutoStartEnabled="true" applicationPool="mySite">
                <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot\mySite" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="127.0.0.1:8080:" />
            </bindings>
        </site>

到目前为止,仅当请求完成时才会调用 Application_Start。

4

1 回答 1

9

我只是想补充@paul 所说的话,并同意我永远无法让 Scott Guthrie在他的博客上所说的完全发挥作用。使用:

<applicationPools>

    <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />

</applicationPools>

将在回收后预加载应用程序池(例如,在回收应用程序池时看到 w3wp.exe 进程重新加载)。

但我从来没有能够让第二部分工作:

<sites>

     <site name="MySite" id="1">

          <application path="/" applicationPool="MyAppWorkerProcess" serviceAutoStartEnabled="true" />

     </site>

</sites>

这可能是因为在使用serviceAutoStartEnabled时,还需要使用serviceAutoStartProvider,这对我来说太过分了,因为我只是希望初始化Global.asax 的 Application_Start 。

幸运的是,在阅读了这篇文章并安装了应用程序初始化模块并在应用程序配置中使用这个值之后:

<sites>

     <site name="MySite" id="1">

          <application path="/" applicationPool="MyAppWorkerProcess" preloadEnabled="true" />

     </site>

</sites>

我能够看到Application_Start在初始化期间被调用。这将我的 10 秒初始 Web 服务调用变成了 750 毫秒的初始 Web 服务调用。使用 preloadEnabled 正是我所需要的。我希望它也能帮助其他人。

于 2013-11-20T21:09:38.737 回答