IIS应用程序池回收+石英计划

Pau*_*sey 13 c# asp.net iis quartz.net

我正在IIS 7.5上运行一个Web应用程序,它需要偶尔回收(否则内存使用会失去处理,我正在调查!).

当它再循环时,它实际上不会运行,直到另一个请求进入,石英不会运行.

有没有办法让IIS在回收应用程序池后立即自动启动1个工作流程,以确保石英始终在线?

Ste*_* S. 14

是!

http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx详细介绍了它,基本上你需要:

  1. 编辑C:\ Windows\System32\inetsrv\config\applicationHost.config以包含:

    <applicationPools> 
        <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" /> 
    </applicationPools>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 声明应该作为您网站的"热身"运行的内容

    <sites> 
        <site name="MySite" id="1"> 
            <application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
        </site> 
    </sites>
    <serviceAutoStartProviders> 
        <add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" /> 
    </serviceAutoStartProviders> 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用您想要的任何"预热"逻辑配置您的应用程序:

    public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient {
        public void Preload(string[] parameters) { 
            // Perform initialization and cache loading logic here... 
        } 
    } 
    
    Run Code Online (Sandbox Code Playgroud)

注意:如果您需要的只是w3wp.exe进程存在,我相信只需要第1步.如果你还需要其他项目(比如某些东西要加载到内存中),那么也会使用第2步和第3步.