亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c#使用windows服務更新站點地圖的詳細示例

 更新時間:2014年04月15日 11:45:09   作者:  
這篇文章主要介紹了c#使用windows服務更新站點地圖的詳細示例,需要的朋友可以參考下

由于公司平臺訪問人數(shù)逐漸增多,公司項目的數(shù)據(jù)庫已經(jīng)幾次出現(xiàn)宕機現(xiàn)象。為減輕數(shù)據(jù)庫壓力,我上個月對公司項目做了下調整。把新聞板塊提取出來單獨一個站點,單獨一個數(shù)據(jù)庫。減少了主站點和數(shù)據(jù)庫的負擔和壓力。

但放在線上一個月,新聞新的發(fā)布數(shù)量最少已經(jīng)有500篇左右。百度只收錄了70個左右,于是想到可能是沒有站點地圖造成的。但怎么定時更新站點地圖呢?

我嘗試使用windows服務來定時更新站點地圖。

首先需要了解下幾個問題。

1、百度收錄的站點地圖(sitemap)的格式。詳情請查看該鏈接:查看

目前我只用到了xml格式的站點地圖,就講下xml格式的站點地圖。

xml格式:

各個標簽的解釋:

<loc>www.example1.com</loc>該頁的網(wǎng)址。該值必須少于256個字節(jié)(必填項)。格式為<loc>您的url地址</loc>

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

<changefreq> always </ changefreq >頁面可能發(fā)生更改的頻率(選填項) 。

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

<priority>1.0</priority >此網(wǎng)頁的優(yōu)先級。有效值范圍從 0.0 到 1.0 (選填項) 。0.0優(yōu)先級最低、1.0最高。

2、站點地圖更新的頻率問題

由于公司新聞更新一般時間固定在9:30-18:00。每天大概發(fā)布10——50篇新聞,所以我設想更新站點地圖的時間在:9:00——19:00,每3個小時更新一次,其他時間不做任何操作,降低數(shù)據(jù)庫查詢的負擔。

開始寫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,意思是:當前系統(tǒng)都能運行。

3、定時觸發(fā)問題的一些需要注意的誤區(qū)。

定時觸發(fā),大家肯定想到的是Timer組件,但一定要記住。windows服務下是沒有Timer控件的。。。。這里看到的Timer組件是不會定時觸發(fā)的,需要自己實現(xiàn)Timer定時觸發(fā)的事件,本人曾在此坑深陷多時。。。。

由于本人為了實現(xiàn)定時觸發(fā)的事件可控性和可修改性。增加了一個配置文件。配置文件添加方式如圖:

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;    //配置文件中配置的秒數(shù)
            aTimer.Start();
        }


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

        /// <summary>
        /// timer定時觸發(fā)
        /// </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);

            //查找根節(jié)點
            XmlNode root = xmlDoc.SelectSingleNode("urlset");
            //刪除以前的所有老節(jié)點
            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程序的名稱

至此,一個服務是徹底完成。

相關文章

  • c#實現(xiàn)無標題欄窗口的拖動

    c#實現(xiàn)無標題欄窗口的拖動

    本篇文章是對c#中實現(xiàn)無標題欄窗口拖動的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • dotnet core鏈接mongodb代碼實例

    dotnet core鏈接mongodb代碼實例

    這篇文章主要介紹了dotnet core鏈接mongodb代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • WPF實現(xiàn)環(huán)(圓)形菜單的示例代碼

    WPF實現(xiàn)環(huán)(圓)形菜單的示例代碼

    這篇文章主要介紹了如何利用WPF繪制一個簡單的環(huán)形菜單,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,需要的可以參考一下
    2022-07-07
  • C#入?yún)⑹褂靡妙愋鸵觬ef的原因解析

    C#入?yún)⑹褂靡妙愋鸵觬ef的原因解析

    這篇文章主要介紹了C#入?yún)⑹褂靡妙愋鸵觬ef的原因解析,我們在實際開發(fā)中還是能夠碰到一些引用類型添加ref的場景,其實道理也是一樣的,就是將引用類型的棧的地址傳遞到了方法中,那么和不添加有啥區(qū)別,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • 舊項目升級新版Unity2021導致Visual?Studio無法使用的問題

    舊項目升級新版Unity2021導致Visual?Studio無法使用的問題

    在項目開發(fā)過程中,不可避免的會升級開發(fā)工具。這次我在舊項目版本升級到新版Unity2021.2.x時,出現(xiàn)Visual?Studio無法定位等問題,這里我給大家分享下解決方法,舊項目升級新版Unity2021導致Visual?Studio無法使用的問題,需要的朋友可以參考下
    2021-12-12
  • C#使用哈希表實現(xiàn)XML文件查詢

    C#使用哈希表實現(xiàn)XML文件查詢

    這篇文章主要為大家詳細介紹了C#如何使用哈希表實現(xiàn)XML文件查詢功能,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-02-02
  • windows下C#定時管理器框架Task.MainForm詳解

    windows下C#定時管理器框架Task.MainForm詳解

    這篇文章主要為大家詳細介紹了windows下C#定時管理器框架Task.MainForm的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#中使用快速排序按文件創(chuàng)建時間將文件排序的源碼

    C#中使用快速排序按文件創(chuàng)建時間將文件排序的源碼

    C#中使用快速排序按文件創(chuàng)建時間將文件排序的源碼...
    2007-03-03
  • WCF如何使用動態(tài)代理精簡代碼架構

    WCF如何使用動態(tài)代理精簡代碼架構

    這篇文章主要介紹了WCF如何使用動態(tài)代理精簡代碼架構,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#創(chuàng)建線程帶參數(shù)的方法

    C#創(chuàng)建線程帶參數(shù)的方法

    本文給大家介紹C#創(chuàng)建線程帶參數(shù)的方法,包括無參數(shù)線程的創(chuàng)建,帶一個參數(shù)線程的創(chuàng)建及帶兩個及以上參數(shù)線程的創(chuàng)建,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-07-07

最新評論