如何让IIS站点在部署后自动启动?

Sha*_*ica 8 iis-7.5 octopus-deploy hangfire

我有一个Web API服务,我正在部署到我的各种环境(使用Octopus Deploy).它应该在启动时执行各种任务,例如运行Entity Framework Code First所需的任何迁移脚本,以及Hangfire管理的一些后台任务.麻烦的是,网站只有在第一次有人打电话时才会醒来.我希望它在我部署后立即运行.我可以通过将Web浏览器指向API的主页来手动完成,但这需要我记住这样做,如果我要部署到多个触角,那么这是一个主要的PITA.

如何在部署后立即强制网站自动启动?

Dan*_*iel 10

在控制面板下打开或关闭窗口功能,在"Web服务器(IIS)| Web服务器|应用程序开发"下,选择"应用程序初始化".

在IIS中,在应用程序池的高级设置上,"启动模式"应设置为"AlwaysRunning".

在IIS中,在站点的高级设置上,"Preload Enabled"应设置为"true".

新部署将导致它再次启动(可能在短暂延迟后).


Fen*_*ton 8

可以使用应用程序初始化模块,正如许多答案所提到的那样,但是将PowerShell步骤放入部署中有两个好处......

  1. 它可以使您的网站热身
  2. 它可以像一个非常基本的烟雾测试
  3. 如果失败,则部署在Octopus中标记为失败

我使用此PowerShell脚本在部署后预热并检查网站.

Write-Output "Starting"

If (![string]::IsNullOrWhiteSpace($TestUrl)) {
    Write-Output "Making request to $TestUrl"

    $stopwatch = [Diagnostics.Stopwatch]::StartNew()
    $response = Invoke-WebRequest -UseBasicParsing $TestUrl -MaximumRedirection 0
    $stopwatch.Stop()

    $statusCode = [int]$response.StatusCode

    If ($statusCode -ge 200 -And $statusCode -lt 400) { 
        Write-Output "$statusCode Warmed Up Site $TestUrl in $($stopwatch.ElapsedMilliseconds)s ms"

        $stopwatch = [Diagnostics.Stopwatch]::StartNew()
        $response = Invoke-WebRequest -UseBasicParsing $TestUrl -MaximumRedirection 0
        $stopwatch.Stop()

        $statusCode = [int]$response.StatusCode
        Write-Output "$statusCode Second request took $($stopwatch.ElapsedMilliseconds)s ms"
    } Else {
        throw "Warm up failed for " + $TestUrl
    }
} Else {
    Write-Output "No TestUrl configured for this machine."
}

Write-Output "Done"
Run Code Online (Sandbox Code Playgroud)