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来实现定时提醒等功能之前,我们先理解一下核心概念与技术背景。ASP.NET是微软开发的一个用于构建动态网页和Web应用程序的框架,它基于.NET框架,提供了丰富的类库和工具集,...
结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...
本文主要讲述了使用ASP.NET基于Windows服务实现定时发送邮件的方法,包括Windows服务、ASP.NET与Windows服务整合、System.Timers.Timer类、Elapsed事件、LogHelper类、FileStream类和StreamWriter类、多线程编程、...
ASP.NET定时任务通常基于`System.Threading.Timer`类或者`System.Timers.Timer`类来实现。这两个类都提供了周期性触发事件的能力。在ASP.NET中,我们可以创建一个后台线程或使用`HttpApplication`的生命周期事件来...
5. 在 ASP.NET 中可以使用 WebBrowser 控件来实现打印功能。 详细解释 在 ASP.NET 中实现打印功能需要使用 Response 对象来设置 HTTP 头信息,以便将文件发送到客户端。例如,在示例代码中,我们可以看到 Response....
在Asp.net(C#)开发中,创建Windows服务并实现定时执行是一项常见的需求,这主要应用于后台自动化任务,如数据同步、日志清理、定时发送邮件等。下面将详细讲解如何进行这一操作。 首先,我们需要了解Windows服务的...
【ASP.NET与Web Service实例剖析】是一场技术讲座或教程,专注于讲解如何使用ASP.NET技术和Web Service进行实际项目开发。ASP.NET是微软推出的用于构建Web应用程序的开发框架,而Web Service则是一种基于XML的通信...
在这个案例中,"asp.net实现的简单留言板"是一个利用ASP.NET技术和SQL Server 2000数据库来构建的基本交互式功能,允许用户在网站上留言并查看其他用户的留言。 1. ASP.NET基础:ASP.NET提供了丰富的控件和类库,...
在这个场景下,"asp.net 模拟键盘操作"涉及的技术点是通过代码来模拟用户的键盘输入。这通常在自动化测试、无人值守的数据输入或者特殊交互需求时会用到。在C#编程语言中,我们可以利用Windows API(应用程序接口)...
在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的开发者来说,是不可或缺的学习资料。它将帮助你理解这两种技术的核心原理,提高开发Web应用...
asp.net写的一个 模拟登录例子 例子中用的是 时光网,我自己习惯用httpwatch来抓取数据 哈哈,我是微软重视的用户
要实现在ASP.NET中定时运行的任务,通常有两种主要方法:使用Windows服务或ASP.NET的Background Worker Thread。 1. **Windows服务**: Windows服务是在后台独立运行的程序,不受用户交互影响,非常适合执行定时...
ASP.NET实现的论坛BBS系统是一个基于微软的ASP.NET技术构建的在线讨论平台,它提供了丰富的功能,使得用户能够方便地发表、回复和管理帖子。ASP.NET是.NET框架的一部分,专为构建动态Web应用程序而设计,它具有高效...
在ASP.NET中,实现托盘消息通常是指在客户端(用户浏览器)上模拟类似QQ这样的桌面应用,能够在屏幕右下角弹出通知或消息窗口的功能。这涉及到JavaScript或者JQuery等客户端脚本技术,因为ASP.NET本身是服务器端的...
本文将详细探讨如何在ASP.NET后台环境下实现对其他网站的模拟登录,并特别关注如何处理验证码。 #### 核心概念与技术 1. **HTTP请求与响应管理** - 在模拟登录过程中,首先需要构建合适的HTTP请求来获取目标网站...
在本项目中,“asp.net2.0 调用websevice 实现天气预报”,我们将探讨如何利用ASP.NET 2.0集成Web服务(Web Service)来获取并展示实时天气信息,从而实现一个无刷新的天气预报应用。 首先,Web服务是一种基于XML的...
总的来说,ASP.NET和Web Service结合使用,可以构建出强大且可扩展的分布式应用程序。通过深入学习和实践"ASP .NET 与 Web Service 实例剖析",开发者可以提升在Web应用程序开发中的技能,理解如何在不同的系统之间...
这通常通过安装.NET Framework来实现,因为ASP.NET是.NET Framework的一部分。在Windows Server 2003中,可以通过光盘或网络下载的方式获取.NET Framework安装包,然后按照提示完成安装。 #### 步骤3:验证配置 ...