Azure Web 角色在部署后自动启动

7

我有一个带有测试页面和服务的Azure Web角色。

在发布角色后,它不会自动启动,只有在第一次使用时才会启动。

因此,如果由于某种原因关闭了角色,则之后的第一次使用会相当缓慢。

是否有办法使Web角色在部署后立即自动启动(无论是第一次还是迁移后)?


1
以下Stackoverflow答案展示了如何在IIS 8(Windows Server 2012)中使用应用程序初始化功能来完成此操作:https://dev59.com/VWrWa4cB1Zd3GeqP_XrI - Juha Palomäki
2个回答

5
请查看IIS 7.5的自动启动功能。确保您为Web角色设置osFamily="2",以便它使用Windows 2008 R2操作系统。
编辑:由于技术原因,我们仍然停留在osFamily="1"。因此,我们尚未能够实现自动启动功能。但是,以下是设置自动启动所需的步骤:
1.创建自己的自动启动提供程序并实现IProcessHostPreloadClient接口。曾经有一个名为Application Warm-Up Module的默认提供程序,但现在已不可下载。您可以使用.Net Reflector查看Microsoft.ApplicationServer.Hosting.AutoStart.ApplicationServerAutoStartProvider.dll的内容作为示例实现。此dll包含在Windows Server (而不是Azure) AppFabric中。
2.下一步是在您的applicationHost.config中指定正确的设置。可以输入此处列出的代码变体此处,以便在Azure Role启动时调用它。
请告知社区您是否成功创建了自己的自动启动提供程序。目前,关于在互联网上实施IProcessHostPreloadClient的信息很少。

@Atesz - 我的回答和David Makogon的结合应该能够给你所需的内容。 - Jonathan McIntire
osFamily这一点说得好,因为默认值是“1”(Windows 2008 SP2)。 - David Makogon
据我所见,您必须在主机上执行此操作,或者我错过了什么?如果我的应用程序迁移到新的机器上怎么办?我还需要再次执行吗?难道你不能通过Azure来做吗(ServiceDefinition有一个Startup标签,在那里我启动了David提到的脚本)?我有点困惑。我的IIS自动启动源 - Attila Klenik
目前这个问题的优先级比较低,因为软件还处于原型阶段。一旦我需要实现它,我会告诉您结果。 - Attila Klenik

2

一般情况下,角色每月会重新启动一次,以进行客户机或底层主机操作系统的维护。您更可能看到的是由于不活动而导致的AppPool超时,这将表现出相同类型的初始延迟。默认超时时间为20分钟。您可以通过提升的启动脚本来更改超时时间,例如:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00

我在另一个SO问题中也讨论了这个问题。


+1 忘记提及设置 AppPool 超时时间了,即使我们在应用程序中禁用了超时时间。 :P - Jonathan McIntire
我知道关于AppPool超时的问题,并且已经使用你提到的相同脚本将其禁用。但有时它仍然会关闭。每个异常都被处理了,所以这不可能是问题的原因。很可能是维护问题,这就是为什么我想在服务重新部署后立即重新启动它的原因。 - Attila Klenik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接