ASP.NET中設定一個定時器來定時更新 轉

來源:互聯網
上載者:User

標籤:style   blog   http   tar   color   get   

 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);
}
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.