如何停止Azure每5分钟启动一次Session_Start

时间:2019-04-16 10:44:17

标签: c# azure background-process

我正在处理一个托管在Azure上的个人ASP.NET MVC5项目

我刚刚意识到,每5分钟Session_OnStart被称为enter image description here

我的代码如下:

public void Session_OnStart()
{
    Guid sessionGuid = Guid.NewGuid();
    HttpContext.Current.Session.Add("_MySession", sessionGuid);
    RegisterSession(sessionGuid);

    logger.Log(LogLevel.Info, "Starting session with guid " + sessionGuid.ToString());
}

这个想法是为每个访问该网站的用户提供一个GUID,以匿名方式跟踪他在做什么以及他打开了哪些页面。

但是,我今天早上没有去PreProd环境,它每5分钟(或多或少5秒)触发一次,这表明它是后台进程或访问网站的内容。
只有在Azure上托管时,这才在localhost测试中发生

如何阻止此操作以防止Azure进程触发Session_OnStart
谢谢

1 个答案:

答案 0 :(得分:2)

您可能已启用“始终开启”。您可以在
下禁用它 应用服务->配置-> General Settings

  

始终在线。默认情况下,如果应用程序闲置了一段时间,则会将其卸载。这样可以节省系统资源。在“基本”或“标准”模式下,您可以启用始终在线以始终保持应用程序加载。如果您的应用程序运行连续WebJobs或运行由CRON表达式触发的WebJobs,则应启用始终在线,否则Web作业可能无法可靠运行。

PS看看Application Insights User Flows能为您做什么。

编辑:

  

当我的网站公开时,禁用“始终在线”会合理地更快吗?没有它太慢了,无法使用。

您启动缓慢的原因是,经过一段时间的不活动之后,运行网站的进程已关闭。必须重新启动该过程需要一些时间,因此速度变慢。顺便说一句,这是因为IIS中运行着ASP.NET。这不是Azure特定的问题。就像Ian Kemp所说的那样,必须从缓慢中修复您的应用。

有多种可能的解决方案,例如Precompiling your website。另一个选择是切换到ASP.NET Core,因为它要快得多。

更多信息:Fixing slow initial load for IIS