3

我有一个带有 2 个实例的 CloudService 经典应用程序,我将其称为 bob_app_001 和 bob_app_002,每个 BobApp 中有 5 个实例。

该应用程序是 ac# Api,它有一个端点,我们用于监视 ~/ping。

我目前通过从流量管理器中取出一项服务进行部署,让流量耗尽,然后 VIP 将登台交换到生产槽,然后重新添加到流量管理器。这里的问题是,随着服务自行启动,前几个请求总是很慢。我试图通过在将池放回旋转之前点击 ping 端点来旋转所有与 Web 相关的东西来避免这种情况。

如何编写脚本从 bob_app_001 获取所有应用程序的 url,然后我可以在 ping 端点上循环调用每个应用程序的 Invoke-WebRequest 以加热服务,然后在 VIP 交换后将其放回 TrafficManager。

4

1 回答 1

3

getting all the app's urls from bob_app_001 这将是棘手的部分,尤其是没有进入应用程序内部并以某种方式暴露 URL(取决于您的路由设置方式)

我建议Application Initialization Module改用。

要启用该模块,您需要applicationInitialization在 web.config 中创建一个部分,您可以在其中定义要启动初始化任务的 URL。

<system.webServer>  
  <applicationInitialization>  
    <add initializationPage="/app/init" />  
  </applicationInitialization>  
<system.webServer>

然后是一个轻量级控制器来进行初始化:

public class InitController : ApiController
{
    [Route("/app/init")]
    public IHttpActionResult Index()
    {
        //do your initialisation / warmup here

        return Ok();
    }
}

我在这个例子中没有提到任何安全概念,但最好限制/app/init从应用程序内部访问(并且只运行一次)

一旦设置完成,部署槽之间的交换操作将在“app/ init ” url下的代码完成后完成。

于 2017-12-21T11:00:48.990 回答