ASP.NET中设置一个定时器来定时更新 转
asp.net 定时器 比较少用, 中国红木网
这是一个相当实用的功能,有了RSS博客镜像,就不需要在多处同时发布博客日志了。比如你同时在新浪上有自己的博客,又同时有自己的个人博客站点,那么你只需要在新浪上发布博客日志,而个人博客站点通过RSS博客镜像功能将新浪博客上发布的新日志自动更新到站点中。
我们在ASP.NET的,至于asp,由于其天生的局限性,可能无法直接在Web应用程序中完成这一功能,而需要额外的Windows应用程序的支持。
1. 管理RSS博客镜像
首先我们需要在RSS博客镜像,需要管理的内容有:
l RSS地址
l 更新频率
l 最后更新的时间
需要管理的内容如图所示,这里所列出的3个是必须的字段,当然根据你自己系统的需要,你可能需要更多的字段。
这部分工作由于和RSS博客镜像,和你本身的系统也是比较相关的,这里就不再多做介绍,你根据自己系统的需要去实现就行。
2. 通过ASP.NET的定时器来抓取RSS源
有了上面的对每个RSS种子ASP.NET中设置一个定时器来定时更新这些RSS种子内容了。
这部分内容请主要参考如下文章《在 ASP.NET 中使用计时器(Timer)》 博客中的实现方式:,根据这篇文章实现定时器就足够了。下面我主要介绍下在
这下面的代码都在Global.ascx.cs中实现。
protected void Application_Start(Object sender, EventArgs e)
{
SetApplicationStatus(RssMirror, true);
// 设置定时器
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(this.RefressRssMirror);
timer.Interval = 300000; // 每5分钟中触发定时器
timer.AutoReset = true;
timer.Enabled = true;
}
private void SetApplicationStatus(string keyword, object result)
{
Application.Lock();
Application[keyword] = result;
Application.UnLock();
}
private void UpdateRssMirror(fmRssMirror item, fmblog.Data.DataProviders.DataProvider provider)
{
try
{
DateTime now = DateTime.Now;
XmlDocument doc = new XmlDocument();
// 载入RSS种子
doc.Load(item.FeedUrl);
// 解析RSS种子内容
fmPostCollection list = fmFeedParser.GetPosts(item.UserName, doc, item.LastUpdateTime);
for(int i=list.Count-1; i>=0; i--)
{
// 根据标题,判断博客日志是否已经存在
if(provider.GetPost(item.UserName, list[i].Title)==null)
{
provider.NewPost(list[i], string.Empty);
}
}
// 设置最后更新时间
provider.SetRssMirrorLastUpdateTime(item.Id, now, item.UserName);
}
catch(Exception)
{
}
}
protected void RefressRssMirror(object sender, System.Timers.ElapsedEventArgs e)
{
// 判断上次触发的定时器是否已经完成
if((bool)Application[RssMirror])
{
SetApplicationStatus(RssMirror, false);
try
{
fmblog.Data.DataProviders.DataProvider provider = fmblog.Data.DataProviders.DataProvider.CreateInstance(Application);
provider.OpenConnection();
try
{
fmRssMirrorCollection list = provider.GetAllRssMirrors();
DateTime now = DateTime.Now;
// 更新RSS博客镜像里的所有RSS种子
foreach(fmRssMirror item in list)
{
TimeSpan span = now - item.LastUpdateTime;
if(span.Hours>=item.UpdateInterval)
{
UpdateRssMirror(item, provider);
}
}
}
catch(Exception)
{
}
provider.CloseConnection();
}
catch(Exception)
{
}
SetApplicationStatus(RssMirror, true);
}
}
ASP.NET中设置一个定时器来定时更新 转的更多相关文章
- android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用
android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用,只要把Imageview的src给去掉就成了,src捕获了bac ...
- Asp.net中的一个判断session是否合法的做法
1 if (Session["UserID"] == "" || Session["UserID"] == null) 2 { 3 ...
- React(0.13) 利用componentDidMount 方法设置一个定时器
<html> <head> <title>hello world React.js</title> <script src="build ...
- html中设置一个div可编辑文本
<div contenteditable="true"></div> <!-- outline: none;设置获取焦点没有高亮边框 -->
- Android Studio中设置一个按钮的不同点击触发事件
my_day_model = (RelativeLayout) v.findViewById(R.id.my_day_model);my_day_pic = (ImageView) v.findVie ...
- 【转】asp.net中设置弹出谈话框的几种方式详解
源地址:https://blog.csdn.net/zou15093087438/article/details/79637114 注:可用winform的MessageBox的方法,只需引用Syst ...
- (办公)mybatis工作中常见的问题(不定时更新)
1.mybatis的like查询的方式. <if test="shopName != null and shopName != ''"> <bind name=& ...
- asp.net中Winform开发框架之数据即时更新的实现
在开篇之前,首先介绍一下Winform开发框架中的界面层的继承关系,首先我把所有窗体区分为三类,一类是普通的窗体,一类编辑窗体,还有一类是列表显示窗体.窗体的集成可以封装处理很多东西,良好的封装和继承 ...
- ACCESS中通过一个字段补齐更新另一个字段
[干货从下面红字开始] 搞了好久的一个问题终于有结果…… 根据学生进出馆的次数和学生报名人数来分配自习间 学生报名是通过工号(学号)来报名的: 而门禁系统统计出来的数据有绝一大部分仅有 卡号没有 工号 ...
随机推荐
- Qt标准对话框之QColorDialog
Qt中提供了一些标准的对话框,用于实现一些常用的预定义功能,比如本节中将要介绍的颜色对话框——QColorDialog. 在不同的系统平台下,颜色对话框的显示效果可能会有所不同,主要因系统主题风格而异 ...
- Python Tips and Traps(二)
6.collections 模块还提供有OrderedDict,用于获取有序字典 import collections d = {'b':3, 'a':1,'x':4 ,'z':2} dd = col ...
- python学习--string
1\string are immutable, which means you can't change an existing string. >>>greeting = 'Hel ...
- Linux使用问答
1.ubuntu 查看安装的软件包? 在终端输入 sudo dpkg -l http://vardesa.blog.hexun.com/58593247_d.html 其他:http://qiuye. ...
- armv7a-mediatek451_001_vfp-linux-gnueabi-gcc: directory: No such file or directory 编译error
release/vm_linux/output/hisense_android/mt5399_cn_android_JB/rel/obj/oss/source/arm_mali_ko/mali400- ...
- IEngineEditor与IWorkspaceEdit,以及相关的事件监听
转自原文 IEngineEditor与IWorkspaceEdit,以及相关的事件监听 IEngineEditor适用于直接在图层上的编辑,例如使用"要素编辑"工具菜单上的&quo ...
- UIApplication 常用方法
下面是这个类的一些功能:1.设置icon上的数字图标 //设置主界面icon上的数字图标,在2.0中引进, 缺省为0 [UIApplicationsharedApplication].applicat ...
- 数据结构练习 02-线性结构3. Pop Sequence (25)
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...
- String的一些细节
String 常量池问题 (1) 字符串常量的"+"号连接,在编译期字符串常量的值就确定下来, 拿"a" + 1来说,编译器优化后在class中就已经是a1. ...
- python基础知识(引用)
文章连接:http://xianglong.me/article/how-to-code-like-a-pythonista-idiomatic-python/