如何将网站配置为使用TFS版本管理自动启动?

时间:2017-11-09 10:14:47

标签: iis tfs tfs2012 iis-8

[我发布此信息是为了记录经过数小时痛苦的反复试验后我实际发现的内容。]

我有一个网站,我需要"始终运行" (因为在这种情况下,它有一个Hangfire工作,负责启动计划任务每5分钟一次,默认情况下,网站仅在收到第一个请求时启动

那么,如何确保网站自动启动?而且,我如何通过TFS版本管理工具配置它?

1 个答案:

答案 0 :(得分:6)

[这个答案并非特定于Hangfire,但请参阅Hangfire documentation's discussion of this issue了解有关它如何影响Hangfire的详细信息,但请注意,建议的解决方案涉及一些问题,而且要复杂得多比下面的解决方案。另请参阅单独的comprehensive discussion on the Hangfire support forum,它提供了几种替代解决方案。]

在IIS中,每个网站都与应用程序池(应用程序池)相关联。您可以将应用程序池配置为通过IIS管理器自动启动,方法是更改​​"启动模式"在"高级设置"中AlwaysRunning对于应用程序池:

enter image description here

但是,启动App Pool不会启动与其关联的网站(或网站)。在收到第一个请求之前,网站不会加载。

在IIS8(或带有扩展名的IIS7.5)中,添加了new setting,允许我们解决此问题。您可以通过设置" Preload Enabled"确保在应用程序池启动后立即向网站发送请求。在"高级设置"中True对于该网站:

enter image description here

这些设置的组合可确保网站在IIS启动时自动启动,并在应用程序池回收后立即启动等。

但是,如何将这些设置自动应用作为TFS版本管道的一部分,而不必记得手动设置?

在您的发布定义中,您可能拥有一个" IIS Web应用程序管理"任务,设置应用程序池和网站。在此步骤的配置面板中,应该有一个" Advanced"带有"附加AppCmd.exe命令的框"进入领域。您可以使用AppCmd应用上述设置。

AppCmd是我在代码 - 高尔夫比赛之外看到的最令人困惑的命令行语法,但这里的咒语对我有用:

set config /section:applicationPools -[name='myAppPoolName'].startMode:AlwaysRunning

set app "mySiteName/" /preloadEnabled:true

请注意,如果您为应用程序池名称和网站名称定义了配置变量,那么您可以使用这些变量而不是对名称进行硬编码,例如:

set config /section:applicationPools -[name='$(appPoolName)'].startMode:AlwaysRunning

我希望这有助于某人...感谢您的倾听: - )