自从我发布Web应用程序的新版本并进行从暂存到生产的交换大约一个星期以来,实际上似乎在之前交换了预热初始化。
由于它是大型应用程序,因此需要花费五分钟以上的时间来预热站点,从而使应用程序无响应。
我有正式的Azure支持,但是响应此请求花了很长时间,但我仍然没有答案。
如果不关闭整个网站八分钟,我将无法解决我们平台上的任何问题或发布新版本。这是一个访问量很高的网站,有付费客户。
有人知道吗?
其他信息
我确实使用applicationInitialization
,并且我看到Azure正在访问页面-它只是发生在交换之后 而不是之前。
<system.webServer>
<applicationInitialization>
<add initializationPage="/nl" hostName="mydomain.com" />
<add initializationPage="/warmup-application-for-azure" hostName="mydomain.com" /> (special page just for warming up services)
<add initializationPage="/deeplink1" hostName="mydomain.com" />
<add initializationPage="/deeplink2" hostName="mydomain.com" />
[etc]
</applicationInitialization>
</system.webServer>
答案 0 :(得分:1)
相对于这个问题,也许不是100%,但是由于我在热身方面也遇到类似的问题,所以我想分享一下我的解决方法。
我曾经遇到过自动缩放问题,因为由于URL重写模块,我的节点没有被预热。因此,如果您的应用程序中有URL重写该怎么办,请确保您要检查
<add input="{WARMUP_REQUEST}" pattern="1" negate="true" />
现在,它在official documentation中,并且具有链接to common problems
答案 1 :(得分:0)
有时候,点击站点的根URL不足以完全预热应用程序。例如,可能有必要点击ASP.NET MVC应用程序中的所有重要路由,或者预先填充内存中的缓存。那是应用程序初始化模块可以提供帮助的地方。
当您使用IIS(和Azure)提供的预热功能而不是那些老式的方法时,并且如果部署到App Service,只需在确保始终触发上添加一个插槽设置即可。如下所示:
本教程介绍了如何使用最近启用的Application Initialization Module
来完全warm up your application prior to swapping it into production。
答案 2 :(得分:0)
这是一个Azure错误,已由Microsoft Azure团队确认。
答案 3 :(得分:-1)
这是您应该考虑的重要事项:
除非您指定天蓝色需要向您的网站请求的URL地址,否则它将如何知道。如果不这样做,它只会调用应用程序的根目录
即使您指定了URL并且需要对URL进行授权/身份验证,如何也可以通过Azure自动登录网站并调用您指定的URL。
您有两种选择来处理它。
1)编写您自己的热身api,以通过授权/身份验证调用您的Web应用程序。然后创建一个调度程序,每隔一小时或半小时调用一次应用程序。它还使您可以保持整个应用程序正常运行和运行。您还可以在“应用程序设置”下设置AlwaysOn功能。临时插槽成功部署后,您还可以在CI / CD管道上触发此api。
2)如果您不想触碰CI / CD管道或任何原因并且不想编写api,则应登录Web应用程序,浏览每个页面并手动进行预热。然后,您可以毫无问题地进行交换。