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

【转】ASP.NET实现定时提醒之类的功能

 
阅读更多
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();
    }
}



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

相关推荐

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

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

    asp.net双向探针

    开发者可能会使用类、接口、线程等概念来设计和实现探针的功能,如定时获取系统信息、处理网络请求等。 双向探针的核心特性在于其双向性,这意味着它不仅能监测服务器状态,还能收集客户端的信息。对于服务器端,...

    ASP.NET Ajax客户端编程

    2. **UpdatePanel**:UpdatePanel是ASP.NET AJAX中最常见的控件之一,用于实现部分页面更新。它创建了一个异步的容器,使得在该容器内的控件可以在不刷新整个页面的情况下更新内容。 3. **ScriptManager**:这个...

    ASP.NET多线程技术.

    ASP.NET多线程技术是开发高效、响应迅速的Web应用程序的关键技术之一。它允许开发者在同一个应用程序中同时执行多个任务,提升系统性能并优化用户体验。本文将深入探讨ASP.NET多线程的基础概念、应用场景以及最佳...

    .net定时器功能源码

    3. **aspnet_compiler.exe**: 在ASP.NET环境中,如果你需要定时编译网站或者预编译发布版本,可以使用这个命令行工具,而不是使用定时器类。 4. **Quartz.NET**: 这是一个开源的作业调度库,它可以创建复杂的定时...

    asp.net 邮件抓取

    【ASP.NET邮件抓取】是基于Visual Studio 2008开发的一款应用程序,它利用了ASP.NET技术来实现对电子邮件的获取与处理。在这款应用中,开发人员选择了使用LINQ(Language Integrated Query,语言集成查询)作为主要...

    asp.net +sql +C#倒计时

    ASP.NET提供了丰富的控件、生命周期管理和内置的安全特性,使得开发者能够高效地构建功能丰富的Web应用。 SQL,全称Structured Query Language,是用于管理关系数据库系统的标准语言。在ASP.NET应用中,通常会使用...

    ASP.NET多线程编程

    ASP.NET多线程编程是开发高效、响应迅速的Web应用程序的关键技术之一。它允许开发者在同一个应用程序中同时执行多个任务,提升系统性能并优化资源利用。在ASP.NET中,多线程可以用于后台处理、异步操作、长时间运行...

    C# ASP.NET - 备份恢复数据库

    可以结合`ASP.NET`的计划任务或者第三方库如`Quartz.NET`来实现定时备份。同时,为了确保数据安全性,备份文件应存储在安全的地方,并且加密处理。 在`BackupRestoreDB`这个项目中,你可能会发现包含示例代码、配置...

    net实现定时任务(Cache+HttpModule)

    通过上述方法,我们成功地利用.NET的`HttpModule`和`Cache`机制实现了一个简单的定时任务功能。这种方式适用于需要在ASP.NET应用程序中执行轻量级定时任务的场景。不过需要注意的是,这种方法依赖于应用程序保持运行...

    ASP.NET多线程编程(一)

    ASP.NET多线程编程是开发高效、响应迅速的Web应用程序的关键技术之一。在现代Web服务和应用程序中,多线程可以提升系统并发处理能力,优化资源利用率,尤其在执行耗时任务时,如后台数据处理、异步I/O操作等。本文将...

    asp.net项目仿通达OA完整源码有数据库

    这个“asp.net项目仿通达OA完整源码有数据库”是一个开发实例,旨在帮助学习者理解如何在ASP.NET环境中构建类似通达OA的功能。通过这个项目,你可以深入学习以下知识点: 1. **ASP.NET MVC架构**:此项目可能采用了...

    C# ASP.NET不妥控件编程实例续2之Ajax实现

    在"C# ASP.NET不妥控件编程实例续2之Ajax实现"这个主题中,我们将重点关注如何结合XML和JSON数据来创建高效、响应式的Web应用程序。 首先,Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况...

    asp.net ajax控件的讲解

    3. **UpdatePanel控件**:UpdatePanel是ASP.NET AJAX中最常用的控件之一,它可以包裹其他控件,并在后台异步更新其内容。当UpdatePanel内的控件触发回发时,只有UpdatePanel的内容会被更新,其余部分保持不变。 4. ...

    asp.net学习笔记

    ASP.NET是微软开发的一种用于构建Web应用程序的框架,它提供了丰富的功能和工具,使得开发者能够高效地构建动态网站、Web应用和服务。以下是对压缩包文件中涉及的ASP.NET相关知识点的详细说明: 1. **Socket通信**...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    ASP.Net MVC是微软推出的区别于ASP.Net WebForm的Web开发新技术,由于ASP.Net MVC解决了ASP.Net WebForm的很多缺点,非常适合大型、中型项目的开发,一经推出就受到了.Net开发社区的追捧,很多.Net开发人员的职位...

    asp.net ajax

    在C#中,ASP.NET AJAX主要通过System.Web.Extensions命名空间下的类和方法实现。这些类包括ScriptManager、UpdatePanel、Timer、AsyncPostBackTrigger等,它们共同构建了一个易于使用的AJAX框架。 1. **...

    asp.net+sql cms信息发布网站

    ASP.NET是微软公司推出的Web应用程序框架,它构建在.NET Framework之上,提供了丰富的开发工具和强大的功能,便于开发人员构建动态网站、Web应用和Web服务。SQL则是Structured Query Language的缩写,是用于管理和...

    ASP.NET-[其他类别]足球即时赔率和比分程序.zip

    1. .cs 文件:C#代码文件,包含了程序的主要逻辑和功能实现。 2. .aspx 或 .ascx 文件:ASP.NET的页面和用户控件文件,定义了用户界面的结构和交互。 3. .config 文件:配置文件,如web.config,包含了应用程序的...

    asp.net

    ASP.NET 提供了多种方法来实现批量更新,例如使用 SqlBulkCopy 类。 - **数据分页(Data Paging):** 在 Web 应用程序中,数据分页是非常重要的功能之一,它能够有效地管理大数据集,提供更好的用户体验。ASP.NET ...

Global site tag (gtag.js) - Google Analytics