网络上的 Azure 预热 api 不工作

Azure warm up on web api is not working

我有一个网站,其中包含一些使用 web api 2 和 .net 4.6 编写的网络服务。我希望在重新启动站点或启动新实例(在 Azure 应用服务上)时初始化应用程序。

我在 webconfig 中有这段代码:

<configuration>
 ,,,,
  <system.webServer>

       ...

  <applicationInitialization doAppInitAfterRestart="true">
  <add initializationPage="/"  />
  <add initializationPage="/api-v2/warmup/get"  />
</applicationInitialization>

我有这个控制器:

public class WarmupController : ApiController
{
   [HttpGet]
    [RequireRole(UserRole.None)]
    [IgnoreTypeScriptGeneration]
    public IHttpActionResult Get()
    {
        Log.Information($"Warming up started. {Environment.MachineName}");
         // my warm up code
         Log.Information($"Warming up succeeded. {Environment.MachineName}");
        return Ok();
    }

我看不到任何日志。不是在我重新启动站点时,也不是在我进行横向扩展时。 我尝试在没有任何 headers 的情况下使用邮递员调用我的 api (只是到达 http://xxx//api-v2/warmup/get 并且它工作正常并且还写入了我的日志。

我已经读过这个帖子:

-Azure 和 webconfig 都没有 IP 限制

-webconfig 中没有 url 重写(例如 https 或 www。)

-没有涉及外部系统(如 CMS),所以我不需要发送主机名,但我也尝试发送它但没有成功

您在 initializationPage 模块中缺少 hostName,其中主机名将是您的实际网站名称 即 xx.azurewebsites.net

<system.webServer>
  <applicationInitialization
    doAppInitAfterRestart="true"
    skipManagedModules="true">
    <add initializationPage="/default.aspx" hostName="myhost"/>
  </applicationInitialization>

Refer here

所以我终于成功了!

问题出在我的代码中,而不是设置中。

启动代码中有一部分正在对请求添加检查,如果它来自本地主机,它就会停止进程。

所以吸取了教训! :)

检查 webconfig 的重定向和重写 检查执行相同操作的代码