Web API上的Azure热身无法正常工作

时间:2018-08-16 13:56:12

标签: c# azure asp.net-web-api2 azure-web-sites warm-up

我有一个网站,其中包含一些使用Web api 2和.net 4.6编写的Web服务。我希望在重新启动网站或启动新实例(在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();
    }

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

我已经阅读了此线程:Cannot warm up pages using applicationInitialization in webconfig

-Azure和webconfig上都没有IP限制

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

-不涉及外部系统(例如CMS),所以我不需要发送主机名,但我也尝试发送主机名,但它不起作用

2 个答案:

答案 0 :(得分:1)

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

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

Refer here

答案 1 :(得分:1)

所以我终于设法使其成功了!

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

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

因此,教训是艰难的! :)

检查webconfig的重定向和重写 检查代码中是否有做同样的事情