程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 利用Windows系統服務自動更新網站

利用Windows系統服務自動更新網站

編輯:關於ASP.NET

應用背景:作為一個站長,為了管理好網站,也為了討好搜索引擎,每天都需要在不同的時段更新網站的內容,有的站長需要維護幾個網站,每天的工作量可想而知,如果逢年過節,站長沒有在電腦旁邊或者無法上網,這個維護工作也就無法進行。

       使用原理:本文介紹了一種方法來自動更新網站內容,采用一個Windows系統服務,設置好它的URL訪問地址,每天在特定時間內訪問需要更新內容的網站的特殊頁面(假定這個頁面為A);在網站端,設置一個審核機制,只有通過審核的內容才能顯示在網站前端,新加的信息默認是不審核,頁面A的作用就是從未審核信息中挑出幾條進行審核,這樣就更新了網站內容,對於靜態首頁的,頁面A還可以生成下首頁靜態頁面。當然頁面A還可以做更多的用途,如備份數據庫、更改到期用戶狀態、刪除無用的臨時文件等。
       詳細原理:
1)        Windows服務端:
              Windows服務采用.Net Framework2.0框架,所以使用時應該先安裝好.Net Framework2.0,下載地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=zh-cn
       采用一個xml文件存儲配置信息,裡面存儲需要訪問的網址,示例結構如下:
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <Urls>
    <item url="http://www.shouji138.com" time="3:59"/>
    <item url="http://www.baidu.com" time="11:59"/>
    <item url="http://www.baidu.com" time="13:59"/>
    <item url="http://www.baidu.com" time="15:59"/>
    <item url="http://www.baidu.com" time="16:59"/>
  </Urls>
</root>
一個item代表一次訪問,url是具體的網址,設置為網站自動更新的url地址,可以帶查詢字符串來設置更新的數量,time表示每天訪問的時間,time只能精確到1分鐘,而且必須保證每個item在同一分鐘內只有一個url任務。
       程序采用一個定時器,每隔20秒掃描一下配置項中是否有需要訪問的網址,如果有則訪問一次這個網址。相關代碼如下:
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!(心跳檢測)");
                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)
                {
                    //到了執行時間
                    if (DateUtil.DateDiff(DateUtil.DateInterval.Minute, workTime, lastworktime) != 0)
                    {
                                          //訪問網址,如 手機主題 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();//得到回寫的字節流
                Log.SaveNote("訪問:" + url);
            }
            catch (Exception ex)
            {
                Log.SaveNote("訪問失敗:" + url);
                Log.SaveException(ex);
            }
            finally
            {
                if (receiveStream != null)
                    receiveStream.Close();
                if (myHttpWebResponse != null)
                    myHttpWebResponse.Close();
            }
        }
2)        網站端:
網站端應該采用審核機制,比如一個表News表,設置字段isaccept為審核字段,1表示已審核,0表示未審核,新增的內容默認為未審核0。我們在平時的時候多添加一些內容到未審核庫中,然後交給程序來自動更新。更新程序可以采用任何動態網頁技術,asp、php、jsp都可以,該程序的作用就是把未審核的內容更改為審核狀態,為了靈活起見,可以設置一個表示更新數量的查詢字符串變量給程序,如num,則更新3條的網址就變成http://www.shouji138.com/A.asp?num=3這種形式,這個網址可以在Windows服務的配置文件中設置好。本文的重點是講采用Windows服務來進行網站更新,所以具體網站端的代碼我就沒有寫出來了,各位站長可以根據自己網站的情況來編寫。Windows服務是與網站端沒有業務邏輯關聯的,windows服務只管定期的來訪問網站端的更新網址,而網站端的更新網址只管更新的業務邏輯。
 
最後,提供下工具和源代碼的下載地址:
Windows服務工具下載:http://www.shouji138.com/aspnet2/files/autopub.rar
Windows服務源碼下載: http://www.shouji138.com/aspnet2/files/autopubsource.rar

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved