利用Windows系統(tǒng)服務(wù)自動(dòng)更新網(wǎng)站
時(shí)間:2010-12-15 16:40:00 來(lái)源:無(wú)憂考網(wǎng) [字體:小 中 大]應(yīng)用背景:作為一個(gè)站長(zhǎng),為了管理好網(wǎng)站,也為了討好搜索引擎,每天都需要在不同的時(shí)段更新網(wǎng)站的內(nèi)容,有的站長(zhǎng)需要維護(hù)幾個(gè)網(wǎng)站,每天的工作量可想而知,如果逢年過(guò)節(jié),站長(zhǎng)沒(méi)有在電腦旁邊或者無(wú)法上網(wǎng),這個(gè)維護(hù)工作也就無(wú)法進(jìn)行。
使用原理:本文介紹了一種方法來(lái)自動(dòng)更新網(wǎng)站內(nèi)容,采用一個(gè)Windows系統(tǒng)服務(wù),設(shè)置好它的URL訪問(wèn)地址,每天在特定時(shí)間內(nèi)訪問(wèn)需要更新內(nèi)容的網(wǎng)站的特殊頁(yè)面(假定這個(gè)頁(yè)面為A);在網(wǎng)站端,設(shè)置一個(gè)審核機(jī)制,只有通過(guò)審核的內(nèi)容才能顯示在網(wǎng)站前端,新加的信息默認(rèn)是不審核,頁(yè)面A的作用就是從未審核信息中挑出幾條進(jìn)行審核,這樣就更新了網(wǎng)站內(nèi)容,對(duì)于靜態(tài)首頁(yè)的,頁(yè)面A還可以生成下首頁(yè)靜態(tài)頁(yè)面。當(dāng)然頁(yè)面A還可以做更多的用途,如備份數(shù)據(jù)庫(kù)、更改到期用戶狀態(tài)、刪除無(wú)用的臨時(shí)文件等。
詳細(xì)原理:
1) Windows服務(wù)端:
Windows服務(wù)采用.Net Framework2.0框架,所以使用時(shí)應(yīng)該先安裝好.Net Framework2.0,下載地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=zh-cn
采用一個(gè)xml文件存儲(chǔ)配置信息,里面存儲(chǔ)需要訪問(wèn)的網(wǎng)址,示例結(jié)構(gòu)如下:
一個(gè)item代表一次訪問(wèn),url是具體的網(wǎng)址,設(shè)置為網(wǎng)站自動(dòng)更新的url地址,可以帶查詢字符串來(lái)設(shè)置更新的數(shù)量,time表示每天訪問(wèn)的時(shí)間,time只能精確到1分鐘,而且必須保證每個(gè)item在同一分鐘內(nèi)只有一個(gè)url任務(wù)。
程序采用一個(gè)定時(shí)器,每隔20秒掃描一下配置項(xiàng)中是否有需要訪問(wèn)的網(wǎng)址,如果有則訪問(wèn)一次這個(gè)網(wǎng)址。相關(guān)代碼如下:
public Job()
{
System.Timers.Timer myTimer = new System.Timers.Timer(20000);
myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled = true;
myTimer.AutoReset = true;
XmlDocument xml = new XmlDocument();
xml.Load(AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings[xmlfile]);
xmllist = xml.SelectNodes(//root/Urls/item);
}
void myTimer_Elapsed(object source, ElapsedEventArgs e)
{
try
{
Log.SaveNote(DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss) + Heart Work!(心跳檢測(cè)));
YourTask();
}
catch (Exception ee)
{
Log.SaveException(ee);
}
}
void YourTask()
{
count++;
if (count > 10000)
count = 0;
for (int i = 0; i < xmllist.Count; i++)
{
string url = xmllist[i].Attributes[url].Value;
string time = xmllist[i].Attributes[time].Value;
//Log.SaveNote(url + - + time);
DateTime workTime = DateTime.Parse(DateTime.Now.ToShortDateString() + + time);
//lastwork
if (DateUtil.DateDiff(DateUtil.DateInterval.Minute, workTime, DateTime.Now) == 0)
{
//到了執(zhí)行時(shí)間
if (DateUtil.DateDiff(DateUtil.DateInterval.Minute, workTime, lastworktime) != 0)
{
//訪問(wèn)網(wǎng)址,如 手機(jī)主題 http://www.shouji138.com
visit(url);
lastworktime = DateTime.Now;
}
}
}
}
void visit(string url)
{
HttpWebRequest myHttpWebRequest = null;
HttpWebResponse myHttpWebResponse = null;
Stream receiveStream = null;
try
{
myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
receiveStream = myHttpWebResponse.GetResponseStream();//得到回寫(xiě)的字節(jié)流
Log.SaveNote(訪問(wèn): + url);
}
catch (Exception ex)
{
Log.SaveNote(訪問(wèn)失敗: + url);
Log.SaveException(ex);
}
finally
{
if (receiveStream != null)
receiveStream.Close();
if (myHttpWebResponse != null)
myHttpWebResponse.Close();
}
}
2) 網(wǎng)站端:
網(wǎng)站端應(yīng)該采用審核機(jī)制,比如一個(gè)表News表,設(shè)置字段isaccept為審核字段,1表示已審核,0表示未審核,新增的內(nèi)容默認(rèn)為未審核0。我們?cè)谄綍r(shí)的時(shí)候多添加一些內(nèi)容到未審核庫(kù)中,然后交給程序來(lái)自動(dòng)更新。更新程序可以采用任何動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),asp、php、jsp都可以,該程序的作用就是把未審核的內(nèi)容更改為審核狀態(tài),為了靈活起見(jiàn),可以設(shè)置一個(gè)表示更新數(shù)量的查詢字符串變量給程序,如num,則更新3條的網(wǎng)址就變成http://www.shouji138.com/A.asp?num=3這種形式,這個(gè)網(wǎng)址可以在Windows服務(wù)的配置文件中設(shè)置好。本文的重點(diǎn)是講采用Windows服務(wù)來(lái)進(jìn)行網(wǎng)站更新,所以具體網(wǎng)站端的代碼我就沒(méi)有寫(xiě)出來(lái)了,各位站長(zhǎng)可以根據(jù)自己網(wǎng)站的情況來(lái)編寫(xiě)。Windows服務(wù)是與網(wǎng)站端沒(méi)有業(yè)務(wù)邏輯關(guān)聯(lián)的,windows服務(wù)只管定期的來(lái)訪問(wèn)網(wǎng)站端的更新網(wǎng)址,而網(wǎng)站端的更新網(wǎng)址只管更新的業(yè)務(wù)邏輯。