Freigeben über


Windows Azure Web Role 的 IIS 重置

如果您是一名 Web 开发人员,您很可能使用过“简单快捷”的 iisreset 命令重置运行不正常的 IIS 主机。这种方法通常在经典的 Windows Server VM 上非常有效。但是,如果您是在 Windows Azure 上运行应用程序,请不要运行 iisreset

如果您阅读了本文章,您可能也会想要浏览我们所有的博客文章,这些文章都非常精彩,我们希望它们能在您开发下一代 Microsoft Azure 应用程序时对您有所帮助。如果您愿意继续浏览,我想说一声非常感谢!

但是如果我们的博客文章并非您读书消遣或睡前阅读的理想选择,您之所以会阅读本文章,可能是因为您尝试在您的 Microsoft Azure VM 上手动重置 IIS,而且现在您已无法访问您的网站。如果是这样,请不要担心,您仍然还有一个快速轻松的解决办法(但请记得,将来不要在 Microsoft Azure Web Role 上运行 Reset IIS)。

为什么不应在 Azure 上运行 IIS 重置?

当您运行 IIS 重置时,将发生的其中一件事就是,负责将客户端连接到您的网站的 Windows 万维网发布服务 (W3SVC) 会停止工作。

在经典的 Windows Server 中,W3SVC 的“启动类型”为自动。因此,W3SVC 服务将自动重启,一切正常运行。

但是在 Windows Azure 中,W3SVC 设置为“使用命令行启动”,因此在您的 Web Role 内部运行的 Windows Azure Agent 能够在启动角色前配置 W3SVC。与经典 Windows Server 中的 IIS 不同,Azure 中的 IIS 角色并不是一直在运行的,而是由 Azure 平台控制其生命周期。

如果不使用 IIS 重置,该如何操作?

如果您在 Windows Azure 中托管的 Web 应用程序遇到问题,而且您认为此问题可能与 IIS 主机有关,我们建议您采取以下操作:

1. 尝试找出故障的根本原因,而不是暂时缓解症状。https://blogs.msdn.com/b/kwill/archive/2013/09/19/troubleshooting-scenario-5-internal-server-error-500-in-webrole.aspx 上介绍的方法可能是一个很好的开始,或者也可以使用 Visual Studio 进行远程调试 - https://msdn.microsoft.com/en-us/library/ff683670.aspx。如果您无法找到问题的根本原因,请联系 Microsoft Azure 支持或在论坛中发帖,届时我们的支持团队可协助您确定问题所在。

2. 确保您有多个角色实例,这样 Azure 负载平衡器便可以将传入流量发送至正常运行的实例。您也可以考虑执行自定义负载平衡器探测,这样一来在 Azure 认为此角色正常运行但 IIS 未正常工作时,负载平衡器仍可正确引导流量。

3. 最后一招,如果您只是需要让网站快速恢复上线,晚些时候再考虑调试问题,您可通过Windows Azure管理门户执行角色重启而非 iisreset。

按照如下步骤使网站恢复上线:

1. 从您的 Microsoft Azure Web Role 或 Worker Role 内部,进入“开始”> services.msc

2. 在 Services (Local)(服务(本地))列表中,向下滚动找到 World Wide Web Publishing Service(万维网发布服务)。找到了吗?

3. 现在,右键单击 World Wide Web Publishing Service(万维网发布服务),然后单击 Start(启动)。好了!您的网站应该已经恢复上线。

但如果您的网站仍无法访问,建议您回到 Azure 管理门户,在 Cloud Service(云服务)下方找到 INSTANCES(实例)选项卡,在您的 Web role 上点击 Reboot(重启),重新启动您的 VM,就像这样(如果您有多个角色实例,您只需要重启您在其中运行了“iisreset”的实例即可):

希望这些信息对您有所帮助!

本文翻译自:https://blogs.msdn.com/b/windowsazure/archive/2014/04/30/iis-reset-on-windows-azure-web-role.aspx