问题:Web超过20分钟(默认时间)没有访问,无活动,Web进入休眠状态
详情:在Web系统中长时间持续、定时执行任务,如当前的RFID系统中的报文解析服务。Web系统部署在运行环境后,超过默认时间无访问,Web系统会自动休眠,导致指定任务无法继续执行。
测试运行环境:
- win8 系统x64专业版
- IIS8.0
- SQLServer 2008 R2 X64
Web基本信息:
- .NET MVC5
- EntityFramework.6.1.3
解决方案:
- 使用计划任务
- 使用Widows服务
- 使用IIS8.0的功能 Application Initialization
本次使用 解决方案第三点,参考官方文章:http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization
步骤:
- 为IIS添加Application Initialization的功能模块
- 找到目录C:\Windows\System32\inetsrv\config 打开applicationHost.config 配置文件
- 查找system.applicationHost / applicationPools / name=".NET v4.5"的Add节点
- 添加属性 startMode="AlwaysRunning"
- 示例:<add name=".NET v4.5" startMode="AlwaysRunning" managedRuntimeVersion="v4.0" />
- 查找system.applicationHost / sites / 部署项目的 site / application
- 添加属性 preloadEnabled="true"
- 示例:<application path="/" preloadEnabled="true" applicationPool=".NET v4.5">
- 打开Web项目的web.config文件
- 找到节点system.webServer
- 添加或修改配置信息
<applicationInitialization remapManagedRequestsTo="Startup.htm" skipManagedModules="true" >
<add initializationPage="/default.aspx" />
</applicationInitialization> - 示例:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="4080"></requestLimits>
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthentication" />
</modules>
<urlCompression doDynamicCompression="false" />
<applicationInitialization
remapManagedRequestsTo="Startup.htm"
skipManagedModules="true" >
<add initializationPage="/default.aspx" />
</applicationInitialization>
</system.webServer>
- 结束,重启IIS
net stop w3svc & net start w3svc
休眠 .NET MVC5项目
参照文章:http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization