Azure Web App闲置4分钟超时:ASP.NET MVC会话清除问题求助
解决Azure Web App免费共享层闲置超时会话丢失问题
Hey there, let's break down what's happening here and how to fix it:
核心原因:免费/共享层的平台限制
首先要明确:Azure的免费(F1)和共享(D1)定价层有一个固有的闲置超时限制——默认是230秒(约3分50秒)。这是平台层面的强制设置,目的是在多租户共享资源的环境中优化资源利用率,一旦你的应用超过这个时间没有请求,Azure就会回收对应的实例。而ASP.NET MVC默认使用的InProc会话是存储在实例内存中的,实例被回收自然就会丢失会话。
这个限制是无法通过应用自身的配置来修改的,属于免费/共享层的特性之一。
先检查你的应用会话配置(虽非核心问题,但可排除额外影响)
不过还是可以确认下应用本身的会话超时设置,避免雪上加霜:
在你的web.config文件中,找到sessionState节点,确保超时时间不是比230秒更短:
<sessionState mode="InProc" timeout="20" /> <!-- 默认是20分钟,这是应用层面的会话过期时间 -->
注意:即便你把这里的timeout设得更长,只要Azure回收了实例,InProc会话还是会丢失。如果需要会话持久化,你可以考虑切换到Azure Redis Cache或SQL Server会话状态,但免费层可能无法支持或需要额外成本。
解决方向
1. 升级到基本层及以上(推荐)
如果要彻底解决闲置超时和会话丢失的问题,必须升级到基本(B1/B2/B3)或更高的定价层。这些层是单租户实例,支持:
- 自定义闲置超时时间:最长可以设置到1440分钟(24小时),你可以在Azure门户的Web App「配置」→「常规设置」中修改「闲置超时」的值。
- 启用「始终开启(Always On)」:这个功能会保持实例持续运行,完全避免闲置回收(同样只有基本层及以上支持)。
2. 临时 workaround(不推荐长期使用)
如果暂时不想升级,你可以尝试通过客户端心跳来保持实例活跃:
- 在前端页面添加一个定时AJAX请求,每隔2-3分钟向服务器发送一个简单的请求(比如访问一个空的API接口),让Azure认为应用一直在活跃,从而避免被回收。
- 但这只是权宜之计,免费/共享层本身还有CPU、内存配额等其他限制,长期使用还是建议升级。
总结一下:你的问题本质是免费共享层的平台限制导致的,应用会话配置不是核心原因。升级到基本层及以上是最直接有效的解决方案,同时可以根据需求配置会话持久化来进一步保障会话数据不丢失。
内容的提问来源于stack exchange,提问作者Ramesh
相关产品推荐
相关产品推荐

