我正在处理一个托管在Azure上的个人ASP.NET MVC5项目
我的代码如下:
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
?
谢谢
答案 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,因为它要快得多。