前两天写了一个定时发送天气预报的程序,老是出现这样或那样的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定点执行任务总结相关推荐

  1. 在 ASP.NET 中执行 URL 重写

    在 ASP.NET 中执行 URL 重写 发布日期: 8/23/2004 | 更新日期: 8/23/2004 Scott Mitchell 4GuysFromRolla.com 适用范围: Micro ...

  2. ASP.NET 定时执行任务(定时器)

    ASP.NET 定时执行任务(定时器)[日期:2010-12-15] 来源:Net探索者  作者:未知 [字体:大 中 小] 服务器端采用C#语法: 1.在Global.asax文件中导入命名空间 & ...

  3. Java如何实现定时任务——从某一天起每天定点执行

    Java如何实现定时任务--从某一天起每天定点执行 1.java定时任务可以借助 java.util.Timer 来实现 [java] view plain copy import java.util ...

  4. Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 此 ASP 页的执行造成响应缓冲区超过其配置限制。

     错误提示(关闭浏览器友好,及打开向客户端发送详细错误) Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 此 ASP 页的执行造成响应缓冲区超过其配置 ...

  5. ASP页的执行造成响应缓冲区超过其配置限制

    Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 /seh/EH2_EMP/Q_Employee_Info_Download.asp 此 ASP 页的执行造 ...

  6. iis服务器响应上限,IIS6 ASP 页的执行造成响应缓冲区超过其配置限制的解决方法...

    Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 此 ASP 页的执行造成响应缓冲区超过其配置限制. 因为页面中数据较多,有上千条,导致出现"超过 ...

  7. 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler...

    在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...

  8. 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 ...

  9. Asp.Net页面执行流程分析

    在我的上一篇文章中说到了HttpModule.HttpHandle的简单使用,我们可以利用它们在页面请求的过程中加入自己的事件处理程序.那么在一个aspx页面请求时后台到底做了什么?当然asp.net ...

最新文章

  1. java的InputStream和OutputStream的理解【转】
  2. ADT17中引入外部JAR包时出现ClassNotFoundException
  3. 亚马逊最大无人售货超市开张,云端结账随拿随走
  4. tensorflow使用object detection实现目标检测超详细全流程(视频+图像集检测)
  5. Netty框架入门案例,代码示例
  6. c++开发软件_Windows下学习C语言有哪些集成开发软件?
  7. vue项目history路由的配置
  8. p6s与onvif_大华的录像机添加海康摄像头,使用了onvif协议,为啥也添加不进去?...
  9. 普元eos根据查询条件导出excel表格
  10. 历史上水平最高的三十首七律
  11. 何为业务安全,业务安全部门的具体职责是什么?
  12. 5G无线技术基础自学系列 | 双工技术
  13. arthes—线上debug好帮手
  14. 阿雪的学习记录|解决Linux下PPPoE拨号上网不稳定的问题
  15. 常用逻辑门电路及其运算表达式
  16. Cesium本地加载地形(dem高程)数据
  17. Oracle查询CLOB类型字段的内容:
  18. 用视频编辑软件给音频降噪的方法
  19. OpenCV系列 | BGR图像转换为RGB图像
  20. SAP模块介绍及概念介绍

热门文章

  1. vector插入/删除元素
  2. 神经网络基础_反向传播_证明
  3. flash as3 android air 插入视频,FLASH加载外部影片as3代码
  4. 用Spring更好地处理Struts动作三种整合
  5. Maven实战——常用Maven插件介绍
  6. 在 Java CAPS 中使用 LDAP
  7. 全端开发——html简介与常用标签
  8. Python StringIO实现内存缓冲区中读写数据
  9. 安全数据分析理念的变化
  10. BibTex (.bib) 文件的凝视