`
shirlly
  • 浏览: 1647907 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

【转】用ASP.NET模拟Windows Service来实现定时提醒之类的功能

 
阅读更多
Windows的计划任务大家应该都熟悉,但是怎样在Web上实现类似的功能呢?调用Windows Service不太现实,因为很多时候我们不能去设置服务器自身的环境。

那么我们来考虑如何在Web这种无状态的环境下模拟同样的功能呢?首先我们需要一个回发的事件,这样才能触发我们所要的效果。那么这里有几种方案可以选择:

1、一个页面被请求的时候
2、应用程序的开始和结束
3、一个Session的开始、结束或超时
4、缓存过期

前3种基本不可用,具体原因就不多解释了(b/s的应该都明白),所以只能用第四种。其实主要原理是利用Cache类中的方法
public void Insert ( System.String key , System.Object value ,
                     System.Web.Caching.CacheDependency dependencies ,
                     System.DateTime absoluteExpiration ,
                     System.TimeSpan slidingExpiration ,
                     System.Web.Caching.CacheItemPriority priority ,
                     System.Web.Caching.CacheItemRemovedCallback onRemoveCallback )
的最后一个参数,他是一个delegate。

下面是具体实现:

首先我们需要在应用程序开始的时候给程序中注入一个模拟的Cache:

private const string DummyCacheItemKey = "GagaGuguGigi";

protected void Application_Start(Object sender, EventArgs e)
{
    RegisterCacheEntry();
}
 
private bool RegisterCacheEntry()

    if( null != HttpContext.Current.Cache[ DummyCacheItemKey ] ) return false;
 
    HttpContext.Current.Cache.Add( DummyCacheItemKey, "Test", null, 
        DateTime.MaxValue, TimeSpan.FromMinutes(1), 
        CacheItemPriority.Normal,
        new CacheItemRemovedCallback( CacheItemRemovedCallback ) );
 
    return true;
}

这里需要注意一下,过期时间只能设为2分钟以上。如果你输入的时间小于2分钟,但仍然是以2分钟计算。(可能是.NET自身的问题)

这样会触发CacheItemRemovedCallback事件,CacheItemRemovedCallback事件的原型如下:


public void CacheItemRemovedCallback( string key, 
            object value, CacheItemRemovedReason reason)
{

}


在这其中我们可以将我们要做的事情的代码添加进去。

------------------------------------  分割 ------------------------------------

等等,不要以为这样就完了,这只是你第一次触发了这个事件。在这个事件完了之后,Cache已经被认定为过期,因为我们要想办法重新将新的Cache加进去。

我们的办法是模拟一次页面请求,然后在这次请求里将Cache添加进去:

上面的Callback事件中加入


public void CacheItemRemovedCallback( string key,
            object value, CacheItemRemovedReason reason)
{
    Debug.WriteLine("Cache item callback: " + DateTime.Now.ToString() );
    HitPage();

    // Do the service works
    DoWork();
}

DoWork()表示你所要做的事情。

HitPage我们这样定义:


private const string DummyPageUrl =
    http://localhost/Reminder/WebForm1.aspx;

private void HitPage()
{
    WebClient client = new WebClient();
    client.DownloadData(DummyPageUrl);
}

模拟页面在执行的时候我们通过Application_BeginRequest这个事件将Cache加入进去

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    // If the dummy page is hit, then it means we want to add another item
    // in cache
    if( HttpContext.Current.Request.Url.ToString() == DummyPageUrl )
    {
       // Add the item in cache and when succesful, do the work.
       RegisterCacheEntry();
    }
}

这样,每次在WebForm1这个页面被请求的时候Cache便会被重新加入。


转自:http://archive.cnblogs.com/a/280299/
分享到:
评论

相关推荐

    用ASP.NET模拟Windows Service来实现定时提醒之类的功能.pdf

    在探讨如何用ASP.NET模拟Windows Service来实现定时提醒等功能之前,我们先理解一下核心概念与技术背景。ASP.NET是微软开发的一个用于构建动态网页和Web应用程序的框架,它基于.NET框架,提供了丰富的类库和工具集,...

    ASP.NET使用Quartz.NET实现定时任务调度

    结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...

    【ASP.NET编程知识】asp.net基于windows服务实现定时发送邮件的方法.docx

    本文主要讲述了使用ASP.NET基于Windows服务实现定时发送邮件的方法,包括Windows服务、ASP.NET与Windows服务整合、System.Timers.Timer类、Elapsed事件、LogHelper类、FileStream类和StreamWriter类、多线程编程、...

    asp.net定时任务(定时器)

    ASP.NET定时任务通常基于`System.Threading.Timer`类或者`System.Timers.Timer`类来实现。这两个类都提供了周期性触发事件的能力。在ASP.NET中,我们可以创建一个后台线程或使用`HttpApplication`的生命周期事件来...

    实现在asp.net中调用打印功能

    5. 在 ASP.NET 中可以使用 WebBrowser 控件来实现打印功能。 详细解释 在 ASP.NET 中实现打印功能需要使用 Response 对象来设置 HTTP 头信息,以便将文件发送到客户端。例如,在示例代码中,我们可以看到 Response....

    Asp.net(C#) 创建windows服务并定时执行

    在Asp.net(C#)开发中,创建Windows服务并实现定时执行是一项常见的需求,这主要应用于后台自动化任务,如数据同步、日志清理、定时发送邮件等。下面将详细讲解如何进行这一操作。 首先,我们需要了解Windows服务的...

    ASP.NET与Web Service实例剖析

    【ASP.NET与Web Service实例剖析】是一场技术讲座或教程,专注于讲解如何使用ASP.NET技术和Web Service进行实际项目开发。ASP.NET是微软推出的用于构建Web应用程序的开发框架,而Web Service则是一种基于XML的通信...

    asp.net实现的简单留言板

    在这个案例中,"asp.net实现的简单留言板"是一个利用ASP.NET技术和SQL Server 2000数据库来构建的基本交互式功能,允许用户在网站上留言并查看其他用户的留言。 1. ASP.NET基础:ASP.NET提供了丰富的控件和类库,...

    asp.net 模拟键盘操作

    在这个场景下,"asp.net 模拟键盘操作"涉及的技术点是通过代码来模拟用户的键盘输入。这通常在自动化测试、无人值守的数据输入或者特殊交互需求时会用到。在C#编程语言中,我们可以利用Windows API(应用程序接口)...

    asp.net写的web service例子

    在ASP.NET应用程序中调用Web Service,可以使用`WebClient`类或者`HttpWebRequest`类。这里以`WebClient`为例: ```csharp using (WebClient client = new WebClient()) { string response = client....

    ASP.NET与Web Service实例剖析中文版(PPT)

    总的来说,"ASP.NET与Web Service实例剖析中文版(PPT)"是一份全面且实用的教程,对于想要深入了解ASP.NET和Web Service的开发者来说,是不可或缺的学习资料。它将帮助你理解这两种技术的核心原理,提高开发Web应用...

    asp.net 模拟登录

    asp.net写的一个 模拟登录例子 例子中用的是 时光网,我自己习惯用httpwatch来抓取数据 哈哈,我是微软重视的用户

    ASP.NET 定时运行

    要实现在ASP.NET中定时运行的任务,通常有两种主要方法:使用Windows服务或ASP.NET的Background Worker Thread。 1. **Windows服务**: Windows服务是在后台独立运行的程序,不受用户交互影响,非常适合执行定时...

    ASP.NET实现的论坛BBS系统

    ASP.NET实现的论坛BBS系统是一个基于微软的ASP.NET技术构建的在线讨论平台,它提供了丰富的功能,使得用户能够方便地发表、回复和管理帖子。ASP.NET是.NET框架的一部分,专为构建动态Web应用程序而设计,它具有高效...

    ASP.NET实现托盘消息

    在ASP.NET中,实现托盘消息通常是指在客户端(用户浏览器)上模拟类似QQ这样的桌面应用,能够在屏幕右下角弹出通知或消息窗口的功能。这涉及到JavaScript或者JQuery等客户端脚本技术,因为ASP.NET本身是服务器端的...

    asp.net后台模拟其他网站带验证码登陆

    本文将详细探讨如何在ASP.NET后台环境下实现对其他网站的模拟登录,并特别关注如何处理验证码。 #### 核心概念与技术 1. **HTTP请求与响应管理** - 在模拟登录过程中,首先需要构建合适的HTTP请求来获取目标网站...

    asp.net2.0 调用websevice 实现天气预报

    在本项目中,“asp.net2.0 调用websevice 实现天气预报”,我们将探讨如何利用ASP.NET 2.0集成Web服务(Web Service)来获取并展示实时天气信息,从而实现一个无刷新的天气预报应用。 首先,Web服务是一种基于XML的...

    ASP .NET 与 Web Service 实例剖析

    总的来说,ASP.NET和Web Service结合使用,可以构建出强大且可扩展的分布式应用程序。通过深入学习和实践"ASP .NET 与 Web Service 实例剖析",开发者可以提升在Web应用程序开发中的技能,理解如何在不同的系统之间...

    Windows 2003 配置asp.net 环境方法

    这通常通过安装.NET Framework来实现,因为ASP.NET是.NET Framework的一部分。在Windows Server 2003中,可以通过光盘或网络下载的方式获取.NET Framework安装包,然后按照提示完成安装。 #### 步骤3:验证配置 ...

Global site tag (gtag.js) - Google Analytics