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来实现定时提醒等功能之前,我们先理解一下核心概念与技术背景。ASP.NET是微软开发的一个用于构建动态网页和Web应用程序的框架,它基于.NET框架,提供了丰富的类库和工具集,...
开发者可能会使用类、接口、线程等概念来设计和实现探针的功能,如定时获取系统信息、处理网络请求等。 双向探针的核心特性在于其双向性,这意味着它不仅能监测服务器状态,还能收集客户端的信息。对于服务器端,...
2. **UpdatePanel**:UpdatePanel是ASP.NET AJAX中最常见的控件之一,用于实现部分页面更新。它创建了一个异步的容器,使得在该容器内的控件可以在不刷新整个页面的情况下更新内容。 3. **ScriptManager**:这个...
ASP.NET多线程技术是开发高效、响应迅速的Web应用程序的关键技术之一。它允许开发者在同一个应用程序中同时执行多个任务,提升系统性能并优化用户体验。本文将深入探讨ASP.NET多线程的基础概念、应用场景以及最佳...
3. **aspnet_compiler.exe**: 在ASP.NET环境中,如果你需要定时编译网站或者预编译发布版本,可以使用这个命令行工具,而不是使用定时器类。 4. **Quartz.NET**: 这是一个开源的作业调度库,它可以创建复杂的定时...
【ASP.NET邮件抓取】是基于Visual Studio 2008开发的一款应用程序,它利用了ASP.NET技术来实现对电子邮件的获取与处理。在这款应用中,开发人员选择了使用LINQ(Language Integrated Query,语言集成查询)作为主要...
ASP.NET提供了丰富的控件、生命周期管理和内置的安全特性,使得开发者能够高效地构建功能丰富的Web应用。 SQL,全称Structured Query Language,是用于管理关系数据库系统的标准语言。在ASP.NET应用中,通常会使用...
ASP.NET多线程编程是开发高效、响应迅速的Web应用程序的关键技术之一。它允许开发者在同一个应用程序中同时执行多个任务,提升系统性能并优化资源利用。在ASP.NET中,多线程可以用于后台处理、异步操作、长时间运行...
可以结合`ASP.NET`的计划任务或者第三方库如`Quartz.NET`来实现定时备份。同时,为了确保数据安全性,备份文件应存储在安全的地方,并且加密处理。 在`BackupRestoreDB`这个项目中,你可能会发现包含示例代码、配置...
通过上述方法,我们成功地利用.NET的`HttpModule`和`Cache`机制实现了一个简单的定时任务功能。这种方式适用于需要在ASP.NET应用程序中执行轻量级定时任务的场景。不过需要注意的是,这种方法依赖于应用程序保持运行...
ASP.NET多线程编程是开发高效、响应迅速的Web应用程序的关键技术之一。在现代Web服务和应用程序中,多线程可以提升系统并发处理能力,优化资源利用率,尤其在执行耗时任务时,如后台数据处理、异步I/O操作等。本文将...
这个“asp.net项目仿通达OA完整源码有数据库”是一个开发实例,旨在帮助学习者理解如何在ASP.NET环境中构建类似通达OA的功能。通过这个项目,你可以深入学习以下知识点: 1. **ASP.NET MVC架构**:此项目可能采用了...
在"C# ASP.NET不妥控件编程实例续2之Ajax实现"这个主题中,我们将重点关注如何结合XML和JSON数据来创建高效、响应式的Web应用程序。 首先,Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况...
3. **UpdatePanel控件**:UpdatePanel是ASP.NET AJAX中最常用的控件之一,它可以包裹其他控件,并在后台异步更新其内容。当UpdatePanel内的控件触发回发时,只有UpdatePanel的内容会被更新,其余部分保持不变。 4. ...
ASP.NET是微软开发的一种用于构建Web应用程序的框架,它提供了丰富的功能和工具,使得开发者能够高效地构建动态网站、Web应用和服务。以下是对压缩包文件中涉及的ASP.NET相关知识点的详细说明: 1. **Socket通信**...
ASP.Net MVC是微软推出的区别于ASP.Net WebForm的Web开发新技术,由于ASP.Net MVC解决了ASP.Net WebForm的很多缺点,非常适合大型、中型项目的开发,一经推出就受到了.Net开发社区的追捧,很多.Net开发人员的职位...
在C#中,ASP.NET AJAX主要通过System.Web.Extensions命名空间下的类和方法实现。这些类包括ScriptManager、UpdatePanel、Timer、AsyncPostBackTrigger等,它们共同构建了一个易于使用的AJAX框架。 1. **...
ASP.NET是微软公司推出的Web应用程序框架,它构建在.NET Framework之上,提供了丰富的开发工具和强大的功能,便于开发人员构建动态网站、Web应用和Web服务。SQL则是Structured Query Language的缩写,是用于管理和...
1. .cs 文件:C#代码文件,包含了程序的主要逻辑和功能实现。 2. .aspx 或 .ascx 文件:ASP.NET的页面和用户控件文件,定义了用户界面的结构和交互。 3. .config 文件:配置文件,如web.config,包含了应用程序的...
ASP.NET 提供了多种方法来实现批量更新,例如使用 SqlBulkCopy 类。 - **数据分页(Data Paging):** 在 Web 应用程序中,数据分页是非常重要的功能之一,它能够有效地管理大数据集,提供更好的用户体验。ASP.NET ...