2

我有一个网站,其中包含一些使用 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),所以我不需要发送主机名,但我也尝试发送它但它没有用

4

2 回答 2

1

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

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

参考这里

于 2018-08-16T14:47:22.267 回答
1

所以我终于设法让它工作了!

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

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

所以教训惨重!:)

检查 webconfig 是否有重定向和重写 检查代码是否有相同的功能

于 2018-09-24T14:38:39.910 回答