8

将完整的云服务项目推送到云上非常耗时,所以如果它有一些小的更改并且我希望它们立即反映,那么我将 RDP 转换为 Web 角色并进行这些更改并重新启动 IIS。也可以为工人角色做这样的事情吗?我可以 RDP 并替换 dll 文件,但我不知道如何重新启动辅助角色,因为它不在 IIS 上运行。我不确定工人角色的作用是什么?我知道这不是一个好的做法,但由于我仍处于开发阶段,这将极大地加快我的测试过程。

有什么简单的方法可以在云上更新工作者角色而不是进行全面推送?

4

2 回答 2

12

布伦特是 100% 正确的,我赞成他的回答。您应该注意不要通过 RDP 对生产服务进行任何更改。话虽如此,您确实提到这只是为了在您的开发阶段进行测试,并且能够更新单个 DLL 文件并进行测试而无需重新部署整个云服务有很多价值。在 Azure VM 上进行故障排除时,我总是这样做。

检查http://blogs.msdn.com/b/kwill/archive/2011/05/05/windows-azure-role-architecture.aspx以了解 VM 上进程的体系结构。特别要注意的是,WaHostBootstrapper 是工作角色和 Web 角色的父进程。要替换 Web 或辅助角色中的 DLL,最好的方法是:

  1. 终止 WaHostBootstrapper。您可以通过任务管理器执行此操作。
  2. 替换 DLL。请注意,执行此操作时需要快速,因为 Azure 会在您终止 WaHostBootstrapper* 后不久自动重新启动所有内容。
  3. 等待 WaHostBootstrapper 自动重启,然后会自动重启 WaWorkerHost/WaIISHost。

*如果您需要更长的时间来进行更改,那么您可以将 WinDBG 等调试器附加到 WindowsAzureGuestAgent 并将其留在进程中。这将阻止 Azure 自动重新启动主机引导程序进程。进行更改后,您可以分离调试器并让 WindowsAzureGuestAgent 继续运行。请注意,如果您让 WindowsAzureGuestAgent 处于停止状态超过 10 分钟,则主机代理将检测到 VM 无响应并重新启动 VM。

*编辑:更详细的说明可在http://blogs.msdn.com/b/kwill/archive/2013/09/05/how-to-modify-a-running-azure-service.aspx获得。

于 2013-08-26T16:08:21.283 回答
6

简单地说,你没有。这样做与 Windows Azure PaaS 云服务的“无状态”性质直接冲突。如果需要移动角色的实例,它将始终恢复到其最初部署的状态,从而使您所做的任何更改无效。并且角色实例可能随时移动。因此,任何尝试 RDP 并进行更改都会给您带来巨大的痛苦。

如果您确实需要这种类型的动态部署,您可以创建一个启动脚本,该脚本从外部存储(例如 Windows Azure Blob 存储)中提取内容文件,并在启动之前将它们拉入角色实例。

Worker 本身只是一个长时间运行的控制台程序,其初始进程由来宾 VM 中的 Windows Azure 代理进程调用角色实例的“OnStart”方法启动。

于 2013-08-26T15:14:45.127 回答