微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用IIS进行云服务预热

如何解决使用IIS进行云服务预热

我碰到了有关预热IIS应用程序https://ruslany.net/2015/09/how-to-warm-up-azure-web-app-during-deployment-slots-swap/链接,此功能可以用于经典的Azure云服务吗? 另外,我几乎没有Autofac依赖项,并且正在初始化db连接对象并将其注册到容器中。目前,我尝试了几种策略,并且由于仅在第一个请求时,此集合才会作为运行状况检查的一部分进行初始化,因此我认为将其作为运行状况检查的一部分不会有任何危害。除非应用程序进入空闲状态,否则以后的运行状况检查请求将不会接触启动部分。 采用这种策略有什么害处吗?

解决方法

如果要在Azure云服务中预热Web应用,则需要至少创建2个Webrol。

您的情况类似于这种情况下的问题。

Azure cloud service app (web role) goes down for ~10 mins occasionally due to Windows Updates? How can I schedule them?

建议您使用Azure Web应用程序服务,当前Azure WebApp相对成熟。定价方面有优势,并且将为Web应用程序提供更多功能。也可以很好地解决您的问题。

,

是的,在经典网络角色中是可能的。

请参见https://docs.microsoft.com/en-us/archive/blogs/kwill/role-instance-restarts-due-to-os-upgrades,尤其是常见问题#5和相关代码。

如果您的网站需要几分钟的时间进行预热(两种标准 IIS / ASP.NET预编译和模块加载或预热 缓存或其他应用特定的任务),那么您的客户可能会遇到 中断或随机超时。角色实例重新启动后,您的 OnStart代码完成后,您的角色实例将被放回 负载平衡器轮换,并将开始接收传入的请求。如果 您的网站仍在预热中,那么所有这些传入请求 将排队等待并超时。如果您只有2个网站实例 然后仍在热身的IN_0将占据100% 来宾操作系统重新启动IN_1时收到的传入请求 更新。这可能会导致您的服务完全中断,直到您 这两个实例的网站均已完成预热。推荐给 将您的实例保持在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();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。