【方案】mvc 保证定时器回收限制

简介: 在项目中我们或多或少的遇到一些需要定时触发或者计算的东西,这个时候我们就需要定时器来作为解决方案。非常好思路清晰,业务逻辑完好,定时器也开好了,当我们信心满满的挂到IIS服务器的时候,发现写的定时器在运行了一段时间之后就不在运行了。

在项目中我们或多或少的遇到一些需要定时触发或者计算的东西,这个时候我们就需要定时器来作为解决方案。非常好思路清晰,业务逻辑完好,定时器也开好了,
当我们信心满满的挂到IIS服务器的时候,发现写的定时器在运行了一段时间之后就不在运行了。

问题分析:

难道是我们的代码写错了吗?不是的,如果写错了怎么又会正常运行几次哪。那问题出在哪里拉,没有错问题在于IIS的程序池。

定时器与闲时超时的冲突:
首先我们分析原因一:没有错你没有看错,IIS还有一个显示超时设置,他会被回收程序池进程。系统一般默认的时间为20分钟,所有也就是说我们的程序如果
5分钟一次也就运行4次就停止掉了。用过Quartz定时任务的小伙伴们都知道吧(深受其苦)。知道是这个东西捣的鬼那就修改他,
方法一:修改他的值,但是很不幸,它最大值也就1740分钟。也就是下面说的第二个问题了,耐心等待。
方法二:不让他闲时超时,所谓的闲时超时就是此网站多少时间没有人访问工作,那你就可以一直访问他,长时间开启一个机器,写一个对此网站的时间小于
闲时超时时间的轮询吧。

程序池的限制:

程序池存在时间限制,我们通过IIS---->引用程序池---->高级设置---->找到回收会发现固定时间间隔为1740.这里就是上面说的显示超时最大时长了。
这是IIS自己的功能,那么又有人说那我把他设置为0(嘿嘿),我个人理解就是你设置为0也不是不回收而是不为固定时间间隔回收。下面附上代码解决方案。

解决程序池回收:

找到原因那就可以对症下药了,既然是自动回收了,那我们只要阻止程序池的自动回收就好了吗?

 1 protected void Application_End(object sender, EventArgs e)
 2 {
 3 //下面的代码是关键,可解决IIS应用程序池自动回收的问题
 4 Thread.Sleep(1000);
 5 //这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start <br>      
 6 //我这里是一个验证token的地址。
 7 string url = System.Configuration.ConfigurationManager.AppSettings["tokenurl"];
 8 HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
 9 HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
10 Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
11 }

 


原理:程序池回收中会触发Application_End事件,在此事件中重新请求网站任意地址,相当于重新激活该网站防止回收。

作者:YanBigFeg —— 颜秉锋

出处:http://www.cnblogs.com/yanbigfeg

本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!

目录
相关文章
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
40 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
169 0
|
5月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
73 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
159 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
95 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
162 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
203 0
|
开发框架 缓存 JSON
ASP.NET Core MVC 从入门到精通之Filter
ASP.NET Core MVC 从入门到精通之Filter
171 0
|
11月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
78 0