如何在 IIS 7.0 中为 ASP.NET 站点最有效地实现“唤醒脚本”

如何在 IIS 7.0 中为 ASP.NET 站点最有效地实现“唤醒脚本”

我有一个 SharePoint 网站和一个自定义 ASP.NET 网站,它们都位于 IIS 7.0 中。我试图实现一种唤醒机制,以便在应用程序池每天早上回收后缓存应用程序池并避免我们都非常熟悉的首次命中延迟。我已经使用下面的脚本在任务计划程序中安排了一项任务,如果我回收应用程序池并运行该任务,网站就会立即出现。我已经多次模拟了这种情况(甚至通过命令行运行脚本,脚本似乎确实唤醒了网站)。但是,当我让任务按计划运行(凌晨 4 点),然后在早上 8 点访问 ASP.NET 网站时,第一次访问时需要 10-15 秒才能唤醒网站。SharePoint 网站似乎在早上很快就恢复了。我尝试将 IIS 的超时空闲设置更新为 24 小时(默认情况下为 20 分钟),以查看应用程序池是否在 ASP.NET 网站唤醒后再次自行回收。此外,应用程序初始化直到 7.5 才可用(在这种情况下,我们只能使用 7.0)。有什么建议吗?

注释: SharePoint 网站在凌晨 3:30 回收 ASP.NET 网站在凌晨 3:30 回收 唤醒任务在凌晨 4 点运行

唤醒脚本:

# urls to wakeup
$urls = "<url-1>",
        "<url-2>"

try 
{
    # loop through urls
    foreach($url in $urls)
    {
        Write-Host "$url waking up..." -foreground yellow

        # wakeup url by fetching page
        $client = new-object system.net.WebClient
        $client.UseDefaultCredentials = $true
        $null = $client.OpenRead($url)
        $client.Dispose()

        Write-Host "$url now awake..." -foreground green
    }
} 
catch 
{
    # exception thrown
    Write-Error $_
    throw $_
}

答案1

立即解决此问题的最简单方法可能就是将脚本运行的间隔增加到每小时或每半小时一次。

但这并不能满足我们了解实际情况的需要。不幸的是,我手边没有任何 IIS 7.0 盒或虚拟机。但我的直觉告诉我,应用程序池设置中仍有一些因素会导致它们停止运行。另一种可能性是一个或多个 ASP.NET 应用程序崩溃了。

相关内容