asp.net定点执行任务总结
前两天写了一个定时发送天气预报的程序,老是出现这样或那样的bug,甚至有时候出现拒绝服务的错误。去网上找了一下资料,发现是自己的定点发送存在一定的问题。现在总结一下经验,并和大家一起探讨一下。
首先我们要使用global.asax中的事件,在Application_Start事件中启动我们的任务,在Application_End中停止我们的任务。 当然启动我们的任务,必须是启动一个线程去完成相应的工作。
开始,我在线程中做的事情是每隔900ms判断一下,当前的事件是否等于指定的时间,如果等于的话,就执行相应的任务,但是这样容易出现的毛病就是访问太频繁了,占用过多的cpu资源。
后来,我想到的方法是,计算现在到定点时间的ms数,由以下函数完成:
private int GetSleepTime(int hour, int min, int second)
{
DateTime now = DateTime.Now;
int sleep = (((hour - now.Hour) * 60 + (min - now.Minute)) * 60 + (second - now.Second)) * 1000;
if (sleep < 0)
sleep += 24 * 3600 * 1000;
return sleep;
}
这样直接sleep到指定的事件点就可以了,然后再执行我们的任务。
为了能够中途能够认为停止,用sleep就不是很方便了,所以我决定用wait,具体的线程方法如下:
private void Run()
{
while (isStart)
{
int sleep = GetSleepTime(19, 0, 0);
lock (locker)
{
Monitor.Wait(locker, sleep);
}
if (isStart)
SendWeatherReport(); // 这是我要定点完成的工作
}
}
当要中途停止的时候,我们调用如下方法:
public void Stop()
{
isStart = false;
lock (locker)
{
Monitor.PulseAll(locker);
}
}
这样我们的目的就要到达了。但后来我发现,第二天早上还是收不到天气预报信息,去网上查了一下,发现asp.ne程序,再一段时间不访问后会被回收。网上也找到了比较猥琐的解决办法,想找其他不猥琐的办法,但是目前还没有找到,或者是一些不太可行的办法。
就是在Application_End事件中,去访问我们的程序,重新激活应用程序。
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
job.Stop();
string url = "http://locahost/weatherreport/default.aspx"; // 在这里指定你的该asp.net程序的地址
HttpWebRequest myHttpWebRequest = null;
HttpWebResponse myHttpWebResponse = null;
StreamReader sr = null;
Stream receiveStream;
string str = null;
try
{
myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
receiveStream = myHttpWebResponse.GetResponseStream();
sr = new StreamReader(receiveStream, Encoding.UTF8);
str = sr.ReadToEnd(); // 这句话,貌似没有是不行的,否则激活不了
}
catch
{
}
finally
{
if (sr != null)
sr.Close();
if (myHttpWebResponse != null)
myHttpWebResponse.Close();
}
}
总结也就这么多了,接下来的时间该做毕设了。
转载于:https://www.cnblogs.com/youwang/archive/2009/04/04/1429418.html
asp.net定点执行任务总结相关推荐
- 在 ASP.NET 中执行 URL 重写
在 ASP.NET 中执行 URL 重写 发布日期: 8/23/2004 | 更新日期: 8/23/2004 Scott Mitchell 4GuysFromRolla.com 适用范围: Micro ...
- ASP.NET 定时执行任务(定时器)
ASP.NET 定时执行任务(定时器)[日期:2010-12-15] 来源:Net探索者 作者:未知 [字体:大 中 小] 服务器端采用C#语法: 1.在Global.asax文件中导入命名空间 & ...
- Java如何实现定时任务——从某一天起每天定点执行
Java如何实现定时任务--从某一天起每天定点执行 1.java定时任务可以借助 java.util.Timer 来实现 [java] view plain copy import java.util ...
- Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 此 ASP 页的执行造成响应缓冲区超过其配置限制。
错误提示(关闭浏览器友好,及打开向客户端发送详细错误) Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 此 ASP 页的执行造成响应缓冲区超过其配置 ...
- ASP页的执行造成响应缓冲区超过其配置限制
Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 /seh/EH2_EMP/Q_Employee_Info_Download.asp 此 ASP 页的执行造 ...
- iis服务器响应上限,IIS6 ASP 页的执行造成响应缓冲区超过其配置限制的解决方法...
Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 此 ASP 页的执行造成响应缓冲区超过其配置限制. 因为页面中数据较多,有上千条,导致出现"超过 ...
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler...
在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...
- vue.js crud_如何使用VS Code和ADO.NET使用ASP.NET Core执行CRUD操作
vue.js crud 介绍 (Introduction) In this article we are going to create a web application using ASP.NET ...
- Asp.Net页面执行流程分析
在我的上一篇文章中说到了HttpModule.HttpHandle的简单使用,我们可以利用它们在页面请求的过程中加入自己的事件处理程序.那么在一个aspx页面请求时后台到底做了什么?当然asp.net ...
最新文章
- java的InputStream和OutputStream的理解【转】
- ADT17中引入外部JAR包时出现ClassNotFoundException
- 亚马逊最大无人售货超市开张,云端结账随拿随走
- tensorflow使用object detection实现目标检测超详细全流程(视频+图像集检测)
- Netty框架入门案例,代码示例
- c++开发软件_Windows下学习C语言有哪些集成开发软件?
- vue项目history路由的配置
- p6s与onvif_大华的录像机添加海康摄像头,使用了onvif协议,为啥也添加不进去?...
- 普元eos根据查询条件导出excel表格
- 历史上水平最高的三十首七律
- 何为业务安全,业务安全部门的具体职责是什么?
- 5G无线技术基础自学系列 | 双工技术
- arthes—线上debug好帮手
- 阿雪的学习记录|解决Linux下PPPoE拨号上网不稳定的问题
- 常用逻辑门电路及其运算表达式
- Cesium本地加载地形(dem高程)数据
- Oracle查询CLOB类型字段的内容:
- 用视频编辑软件给音频降噪的方法
- OpenCV系列 | BGR图像转换为RGB图像
- SAP模块介绍及概念介绍