程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#應用windows辦事更新站點地圖的具體示例

c#應用windows辦事更新站點地圖的具體示例

編輯:C#入門知識

c#應用windows辦事更新站點地圖的具體示例。本站提示廣大學習愛好者:(c#應用windows辦事更新站點地圖的具體示例)文章只能為提供參考,不一定能成為您想要的結果。以下是c#應用windows辦事更新站點地圖的具體示例正文


因為公司平台拜訪人數逐步增多,公司項目標數據庫曾經幾回湧現宕機景象。為加重數據庫壓力,我上個月對公司項目做了下調劑。把消息板塊提掏出來零丁一個站點,零丁一個數據庫。削減了主站點和數據庫的累贅和壓力。

但放在線上一個月,消息新的宣布數目起碼曾經有500篇閣下。百度只收錄了70個閣下,因而想到能夠是沒有站點地圖形成的。但怎樣准時更新站點地圖呢?

我測驗考試應用windows辦事來准時更新站點地圖。

起首須要懂得下幾個成績。

1、百度收錄的站點地圖(sitemap)的格局。概況請檢查該鏈接:檢查

今朝我只用到了xml格局的站點地圖,就講下xml格局的站點地圖。

xml格局:

各個標簽的說明:

<loc>www.example1.com</loc>該頁的網址。該值必需少於256個字節(必填項)。格局為<loc>您的url地址</loc>

<lastmod>2010-01-01</lastmod>該文件前次修正的日期(選填項)。格局為<lastmod>年-月-日</lastmod>

<changefreq> always </ changefreq >頁面能夠產生更改的頻率(選填項) 。

有用值為:always、hourly、daily、weekly、monthly、yearly、never

<priority>1.0</priority >此網頁的優先級。有用值規模從 0.0 到 1.0 (選填項) 。0.0優先級最低、1.0最高。

2、站點地圖更新的頻率成績

因為公司消息更新普通時光固定在9:30-18:00。天天年夜概宣布10——50篇消息,所以我假想更新站點地圖的時光在:9:00——19:00,每3個小時更新一次,其他時光不做任何操作,下降數據庫查詢的累贅。

開端寫windows 辦事。

1、新建windows辦事,給windows起個名字

2、添加裝置法式

雙擊Service1.cs進入視圖界面,右鍵,選擇“添加裝置法式”

添加今後的後果。

serviceInstaller1:辦事裝置組件。(重要用於設置 辦事稱號、辦事描寫、辦事能否開機啟動或延遲啟動、辦事啟動方法等)

serviceProcessInstaller1:辦事過程裝置組件(重要用戶設置運轉辦事的賬戶類型,如:User、LocalService、NetworkService、LocalSystem等)

serviceInstaller1的屬性設置(快捷鍵F4):

屬性解釋:

DelayedAutoStart:設置能否主動啟動

Description:辦事描寫

ServiceName:辦事稱號

StartType:啟動類型。有三種:Manual(啟動)、Automatic(主動)、Disabled(不啟動)

serviceProcessInstaller1屬性設置(快捷鍵F4):

屬性解釋:

Account:運轉辦事的賬戶類型。有四種:User、LocalService、NetworkService、LocalSystem。

我選擇的是LocalSystem,意思是:以後體系都能運轉。

3、准時觸提問題的一些須要留意的誤區。

准時觸發,年夜家確定想到的是Timer組件,但必定要記住。windows辦事下是沒有Timer控件的。。。。這裡看到的Timer組件是不會准時觸發的,須要本身完成Timer准時觸發的事宜,自己曾在此坑深陷多時。。。。

因為自己為了完成准時觸發的事宜可控性和可修正性。增長了一個設置裝備擺設文件。設置裝備擺設文件添加方法如圖:

windows辦事項目——右鍵——添加——新建項

設置裝備擺設文件設置:

4、准時windows辦事代碼:


public partial class NPcgoNewsService : ServiceBase
    {
        Timer aTimer = new Timer();       //System.Timers,不是form的 
        public NPcgoNewsService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            //一個一向重寫sitemap的辦事
            aTimer.Elapsed += new ElapsedEventHandler(aTimer_Tick);
            aTimer.Enabled = true; 
            aTimer.Interval = int.Parse(PublicMethods.GetAppSettings("NewsSiteUpdateTime")) * 1000;    //設置裝備擺設文件中設置裝備擺設的秒數
            aTimer.Start();
        }


        protected override void OnStop()
        {
            this.aTimer.Enabled = false;
            this.aTimer.Stop();
        }

        /// <summary>
        /// timer准時觸發
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void aTimer_Tick(object sender, ElapsedEventArgs e)
        {
            //挪用該辦事的時光為上午9點——下晝18點,其他時光不挪用
            if (DateTime.Now.Hour >= 9 && DateTime.Now.Hour <= 19)
            {
                MakeSiteMap make = new MakeSiteMap();
                make.GetBaiDuSiteMap();
            }
        }
    }

生成百度地圖的辦法(GetBaiDuSiteMap):


        /// <summary>
        /// 生成百度站點地圖
        /// </summary>
        /// <returns></returns>
        public void GetBaiDuSiteMap()
        {
            XmlDocument xmlDoc = new XmlDocument();
            //獲得消息站點地圖的當地保留途徑
            string path = Path.Combine(PublicMethods.GetAppSettings("NewsSiteMapPath"));
            xmlDoc.Load(path);

            //查找根節點
            XmlNode root = xmlDoc.SelectSingleNode("urlset");
            //刪除之前的一切老節點
            root.RemoveAll();

            #region 平台通知布告
            //查詢最新100條平台通知布告
            List<IT_NEWS> platformnotice = GetPlatformNotice();
            if (platformnotice != null && platformnotice.Count > 0 && platformnotice[0].newsId > 0)
            {
                foreach (IT_NEWS platformNoticeNews in platformnotice)
                {
                    XmlElement xesub1 = xmlDoc.CreateElement("url");

                    XmlElement xe1 = xmlDoc.CreateElement("loc");
                    xe1.InnerText = "http://news.npcgo.com" + "/notice-" + platformNoticeNews.newsType + "-" + platformNoticeNews.newsId + ".html";
                    XmlElement xe2 = xmlDoc.CreateElement("lastmod");
                    xe2.InnerText = Convert.ToDateTime(platformNoticeNews.newsCreateTime).ToString("yyyy-MM-dd");
                    XmlElement xe3 = xmlDoc.CreateElement("changefreq");
                    xe3.InnerText = "daily";
                    XmlElement xe4 = xmlDoc.CreateElement("priority");
                    xe4.InnerText = "0.2";

                    xesub1.AppendChild(xe1);
                    xesub1.AppendChild(xe2);
                    xesub1.AppendChild(xe3);
                    xesub1.AppendChild(xe4);

                    root.AppendChild(xesub1);
                }
            }
            #endregion

            xmlDoc.AppendChild(root);
            xmlDoc.Save(path);
        }

裝置windows辦事:

須要寫一個windows辦事裝置的批處置和卸載的批處置,都放在windows辦事項目標bin/Debug文件夾下。

裝置辦事,install.bat代碼:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe GameTradingNewsService.exe
Net Start NPCgoNewsServices
sc config NPCgoNewsServices start= auto

說明:

GameTradingNewsService.exe 是windows辦事項目編譯今後bin文件中的exe法式的稱號。
Net Start xxx 是開啟xxx辦事
NPCgoNewsServices 是windows辦事稱號(即:serviceInstaller1屬性面板設置的辦事稱號(serviceName屬性))
sc config NPCgoNewsServices start= auto 是設置windows辦事啟動方法為主動

卸載辦事 unstall.bat代碼:


%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u GameTradingNewsService.exe
GameTradingNewsService.exe 是windows辦事項目編譯今後bin文件中的exe法式的稱號

至此,一個辦事是完全完成。

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