【问题标题】:Automatic start of Azure webrole after deploy部署后自动启动 Azure webrole
【发布时间】:2012-03-23 17:25:20
【问题描述】:

A 有一个带有测试页面的天蓝色 webrole 和一个担任该角色的服务。 发布角色后,它不会自动启动,仅在第一次使用时启动。 因此,如果角色由于某种原因被关闭,那么之后的第一次使用会很慢。

有没有办法让 webroles 在部署后(第一次或迁移后)立即自动启动?

【问题讨论】:

标签: iis deployment azure azure-web-roles


【解决方案1】:

查看auto start feature of IIS 7.5。确保为 webrole 设置了 osFamily="2",以便它使用 Windows 2008 R2 操作系统。

编辑:由于技术原因,我们仍然停留在 osFamily="1" 上,所以我们还不能实现自动启动功能。但是,以下是设置自动启动所需的步骤:

  1. 创建您自己的实现IProcessHostPreloadClient interface 的自动启动提供程序。曾经有一个名为Application Warm-Up Module 的默认提供程序,但它不再可供下载。您可以使用 .Net Reflector 查看 Microsoft.ApplicationServer.Hosting.AutoStart.ApplicationServerAutoStartProvider.dll 的内容作为示例实现。此 dll 包含在 Windows Server(不是 Azure)AppFabric 中。

  2. 下一步是在 applicationHost.config 中指定正确的设置。可以在 RoleEntryPoint 类中输入列出的代码 here 的一些变体,以便在 Azure 角色启动时调用它。

如果您成功创建了自己的自动启动提供程序,请告知社区。目前,网上关于实现IProcessHostPreloadClient的信息并不多。

【讨论】:

  • @Atesz - 我的回答和 David Makogon 的结合应该可以满足您的需求。
  • 在 osFamily 上好点,因为默认值为“1”(Windows 2008 SP2)。
  • 如我所见,您必须在主机上执行此魔法,还是我遗漏了什么?如果我的应用程序迁移到新机器怎么办?我必须再做一次吗?你不能通过 Azure 来做吗(ServiceDefinition 有一个 Startup 标签,我在哪里启动 David 提到的 sricpt)?我在这里有点困惑。 My source of IIS autostart
  • 目前这是一个低优先级问题,因为软件处于原型设计阶段。一旦我需要实施它,我会告诉你结果。
【解决方案2】:

一个角色通常大约每月重新启动一次,用于来宾或底层主机操作系统的操作系统维护。您更有可能看到的是由于不活动而导致的 AppPool 超时,这将表现出相同类型的初始命中延迟。默认超时为 20 分钟。您可以通过提升的启动脚本更改超时,例如:

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

我也在another SO question 中讨论过这个问题。

【讨论】:

  • +1 忘记设置 AppPool 超时,即使我们在应用程序中禁用了超时。 :P
  • 我知道 AppPool 超时,并且它被禁用(使用您提到的相同脚本)。但有时它仍然会关闭。每个异常都被处理,所以它不会是一个问题。可能是维护,这就是为什么我想在它再次部署后再次启动该服务。
猜你喜欢
  • 2012-11-22
  • 2012-08-06
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多