我有一个网站,其中包含一些使用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),所以我不需要发送主机名,但我也尝试发送主机名,但它不起作用
答案 0 :(得分:1)
您在initializationPage
模块中缺少 hostName ,其中主机名将是您的实际网站名称 即xx.azurewebsites.net >
<system.webServer>
<applicationInitialization
doAppInitAfterRestart="true"
skipManagedModules="true">
<add initializationPage="/default.aspx" hostName="myhost"/>
</applicationInitialization>
答案 1 :(得分:1)
所以我终于设法使其成功了!
问题出在我的代码中,而不是设置中。
启动代码中有一部分正在向请求中添加检查,如果来自本地主机,它将停止进程。
因此,教训是艰难的! :)
检查webconfig的重定向和重写 检查代码中是否有做同样的事情