首页 > 解决方案 > 如何阻止 Azure 每 5 分钟触发一次 Session_Start

问题描述

我正在使用托管在 Azure 上的个人 ASP.NET MVC5 项目

我刚刚意识到,每 5 分钟Session_OnStart调用一次在此处输入图像描述

我的代码如下所示:

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 秒)触发一次的事实表明它是一个后台进程或访问网站的东西。
这在 localhost 测试中没有发生,只有在 Azure 上托管时才会发生

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

标签: c#azurebackground-process

解决方案


您可能启用了 Always On。
您可以在App Service -> Configuration -> General Settings下禁用它。

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

PS 看看 Application Insights用户流可以为您做什么。

编辑:

当我的网站公开时,禁用 Always On 会不会更快?没有它太慢了,无法使用。

您遇到的启动缓慢是因为运行您网站的进程在一段时间不活动后关闭。必须重新启动该过程需要一些时间,因此会放缓。顺便说一下,这是因为 ASP.NET 在 IIS 中运行。这不是 Azure 特定的问题。就像Ian Kemp所说,必须让你的应用程序变得缓慢。

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

更多信息:修复 IIS 的缓慢初始加载


推荐阅读