在IIS中启动应用程序池后调用Application_Start

fis*_*iso 4 .net application-start iis-7.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>
Run Code Online (Sandbox Code Playgroud)

..

 <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>
Run Code Online (Sandbox Code Playgroud)

到目前为止,仅在请求完成时才调用Application_Start.

Jam*_*Eby 8

我只想补充@paul所说的内容,并同意我无法得到Scott Guthrie 在他的博客所说的全部功能.使用:

<applicationPools>

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

</applicationPools>
Run Code Online (Sandbox Code Playgroud)

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

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

<sites>

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

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

     </site>

</sites>
Run Code Online (Sandbox Code Playgroud)

这可能是因为当使用serviceAutoStartEnabled时使用serviceAutoStartProvider也是必要的,这对我来说太过分了,因为我只是想要初始化Global.asax的Application_Start.

幸运的是,在阅读本文并安装应用程序初始化模块并在应用程序配置中使用此值后:

<sites>

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

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

     </site>

</sites>
Run Code Online (Sandbox Code Playgroud)

我能够看到在初始化期间正在调用Application_Start.这将我的10秒初始Web服务调用转换为750毫秒的初始Web服务调用.使用preloadEnabled正是我所需要的.我希望它也有助于其他人.