我偶然发现了这个关于预热IIS应用程序https://ruslany.net/2015/09/how-to-warm-up-azure-web-app-during-deployment-slots-swap/的链接,这个特性可以用于azure云服务吗?此外,我有很少的Autofac依赖项,并且我正在初始化db连接对象并将其注册到容器中。目前我尝试了一些策略,因为只有在第一次请求时,这个集合才会被初始化为健康检查的一部分,所以我不认为将其作为健康检查的一部分有什么坏处。以后的健康检查请求不会触及启动部分,除非App进入空闲状态。应用这样的策略有什么坏处吗?
发布于 2020-10-19 09:50:35
如果你想在azure云服务中预热你的webapp,你需要创建至少2个。
您的场景与本例中的问题类似。
建议您使用azure web应用程序服务,目前Azure web应用程序相对成熟。在定价方面有优势,并且将为web应用程序提供更多功能。也可以很好地解决你的问题。
发布于 2020-10-20 14:09:18
是的,这在传统的web角色中是可能的。
请参阅https://docs.microsoft.com/en-us/archive/blogs/kwill/role-instance-restarts-due-to-os-upgrades,特别是常见问题#5和相关代码。
如果您的网站预热需要几分钟时间(预编译和模块加载的标准IIS/ASP.NET预热,或者预热缓存或其他应用程序特定任务),则您的客户端可能会遇到宕机或随机超时。在角色实例重新启动并且OnStart代码完成之后,您的角色实例将被放回负载均衡器轮换中,并开始接收传入的请求。如果您的网站仍在预热,那么所有这些传入的请求都将排队并超时。如果您的web角色只有2个实例,则在IN_1重启以进行来宾操作系统更新时,仍在预热中的IN_0将接受100%的传入请求。这可能会导致您的服务完全中断,直到您的网站在这两个实例上完成预热。建议将您的实例保持在OnStart中,这将使其处于繁忙状态,在您完成预热之前,它不会接收来自负载均衡器的传入请求。您可以使用以下代码来完成此操作:
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
// For information on handling configuration changes
// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
string ip = null;
foreach (IPAddress ipaddress in ipEntry.AddressList)
{
if (ipaddress.AddressFamily.ToString() == "InterNetwork")
{
ip = ipaddress.ToString();
}
}
string urlToPing = "http://" + ip;
HttpWebRequest req = HttpWebRequest.Create(urlToPing) as HttpWebRequest;
WebResponse resp = req.GetResponse();
return base.OnStart();
}
}https://stackoverflow.com/questions/64419870
复制相似问题