给web服务器写个每天一次的清理任务

SeverusX 2020-09-10 03:02:07
网上搜到的方法是写在Global.asax的Application_Start里面,说是iis启动后,有第一个人访问网站了,就会执行。目前有几点小疑惑:1、有人访问了,就会执行,然后用户关闭了网页,会有影响吗?2、多个人访问,会执行多次吗?3、是否是开始执行后,只要不关闭iis,定时任务就不会终止?
...全文
2554 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
八爻老骥 2020-09-19
  • 打赏
  • 举报
回复
如果只是清理内存的话,IIS里将程序池设成定时强制回收即可。

闪耀星星 2020-09-19
  • 打赏
  • 举报
回复
操作系统有任务计划,添加一个执行清理任务的脚本可以了
沫含天下 2020-09-11
  • 打赏
  • 举报
回复
或者 你百度一下 Quartz.net 用这个框架写 任务
沫含天下 2020-09-11
  • 打赏
  • 举报
回复
你在 Application_End 这里写个 自己访问自己 不就得了
protected void Application_End(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(5000);
            string url = "http://localhost:XXXX//XXXXX";
            System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
            System.Net.HttpWebResponse rsp = (System.Net.HttpWebResponse)req.GetResponse();
            string tmp = rsp.StatusDescription;
            string errorlogtime = DateTime.Now.ToString("yyyyMMddhhmmssfff").ToString();        
            if (sched != null)
            {
                sched.Shutdown(true);
            }
        }
SeverusX 2020-09-11
  • 打赏
  • 举报
回复
引用 8 楼 昨天忆 的回复:
Global.asax的Application_Start会在iis启动后,有第一个人访问网站了,就会执行,可以在里面开个定时器System.Timers.Timer,不过在无人访问网站后,会在默认20分钟后程序关闭(要看web.config中设置的时间Timeout,<sessionState mode="InProc" cookieless="false" timeout="20"></sessionState>),程序关闭后定时器也就不运行了,之后再有人访问网站,Application_Start方法还是会重新运行的
懂了,感谢
SeverusX 2020-09-11
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
洁癖和强迫症并不能帮助你解决问题。 我只说,如果他不会产生啥影响,那么我可以保证他会执行,而不保证他一啥时候执行。 3天没访问iis,应用程序池不启动,影响业务么? 不影响业务那么就3天后那个人访问的时候做有问题么? 访问的时候同时做影响业务么?无影响或者可以忽略不计,你担心啥 如果有影响而且必须做。才会涉及到重新设计方案。也就是上面说的“业务需要重构,而不是洁癖和强迫症让你无端操心”
好的,说的很明白了,感谢
昨天忆 2020-09-11
  • 打赏
  • 举报
回复
Global.asax的Application_Start会在iis启动后,有第一个人访问网站了,就会执行,可以在里面开个定时器System.Timers.Timer,不过在无人访问网站后,会在默认20分钟后程序关闭(要看web.config中设置的时间Timeout,<sessionState mode="InProc" cookieless="false" timeout="20"></sessionState>),程序关闭后定时器也就不运行了,之后再有人访问网站,Application_Start方法还是会重新运行的
wanghui0380 2020-09-11
  • 打赏
  • 举报
回复
洁癖和强迫症并不能帮助你解决问题。 我只说,如果他不会产生啥影响,那么我可以保证他会执行,而不保证他一啥时候执行。 3天没访问iis,应用程序池不启动,影响业务么? 不影响业务那么就3天后那个人访问的时候做有问题么? 访问的时候同时做影响业务么?无影响或者可以忽略不计,你担心啥 如果有影响而且必须做。才会涉及到重新设计方案。也就是上面说的“业务需要重构,而不是洁癖和强迫症让你无端操心”
wanghui0380 2020-09-11
  • 打赏
  • 举报
回复
不必强迫症,不必纠结啥一天,iis 你的系统不会因为这个挂掉,你保证2,3天能够被执行n次的能力就好(1<N<20). 如果说你的系统会因为你延迟了1分钟清理就挂掉,就数据不准。那只能说你的系统需要重新设计了 比如财务夜核,这种业务需要每天执行1次。那么当是这种要求的时候,你还纠结啥iis Application_Start么?很明显他需要重新设计了
by_封爱 版主 2020-09-11
  • 打赏
  • 举报
回复
其实无所谓.. 我们就用最简单的方式来辩论.. 你appstart的时候 去实例化一个定时器 假设1小时执行一次. 你一天一次 那么随便写一个H=数字(0-23) 都可以. 好 现在有人说 会有重启 或者意外重启 或者自动回收 . 但是 他们都不是停止... 也就是 只要执行了上述动作 依然会执行appstart.. 又会有一个新的定时器
wanghui0380 2020-09-11
  • 打赏
  • 举报
回复
其实真不必纠结。 我们来看一下一些,知名设计 redis: redis说,过期不过期有那么重要么,有人访问我就执行一下过期检查,没人访问我过期不过期不重要。 好吧,你说你不想检查,OK,修改配置,变成过期推送通知,我在说搞个定时器去玩(当然redis一样说的是,这个定时器不会很精准,我不保证精准,单保证他终会被移除) 这个风格也弄到了netcore里,famerwork里runtimecache是提供实时移除通知的,但到了netcore里的cache,可是不会给你实时移除的,他跟redis一样,说的是“反正他总会移除,你访问我才去检查,不访问我没必要无端弄个检查,浪费性能”
zhiyicom 2020-09-11
  • 打赏
  • 举报
回复
不错
SeverusX 2020-09-10
  • 打赏
  • 举报
回复
引用 3 楼 ying1234 的回复:
还是用windows service吧,Application_Start这种东西实际应用几乎不再用,你无法控制它什么时候会重启。
唉,难受
ying1234 2020-09-10
  • 打赏
  • 举报
回复
还是用windows service吧,Application_Start这种东西实际应用几乎不再用,你无法控制它什么时候会重启。
SeverusX 2020-09-10
  • 打赏
  • 举报
回复
是想执行msmq消息队列的,但是不想用windows service,想写在项目里。那按照你的意思,就是如果能记录好操作记录,是可以使用这个的是吗?
晨易夕 2020-09-10
  • 打赏
  • 举报
回复
Application_Start这个东西,可能会因为IIS的应用程序池更改或者其他什么原因意外的重新启动。 你要执行定时任务,还是需要把执行的记录日志保存下来,避免重复执行或漏掉。

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧