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

使用windows服務更新站點地圖

編輯:C#入門知識

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

但放在線上一個月,新聞新的發布數量最少已經有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服務代碼:

  =  Timer();       
           OnStart(
            aTimer.Elapsed += = = .Parse(PublicMethods.GetAppSettings()) * ;    
  .aTimer.Enabled =  
         
         
         
          aTimer_Tick(
             (DateTime.Now.Hour >=  && DateTime.Now.Hour <= = 

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

         
         
         
         = 
             path = Path.Combine(PublicMethods.GetAppSettings(
            XmlNode root = xmlDoc.SelectSingleNode(
 平台公告
            
            List<IT_NEWS> platformnotice = (platformnotice !=  && platformnotice.Count >  && platformnotice[].newsId >  (IT_NEWS platformNoticeNews = xmlDoc.CreateElement(= xmlDoc.CreateElement(=  +  + platformNoticeNews.newsType +  + platformNoticeNews.newsId + = xmlDoc.CreateElement(= Convert.ToDateTime(platformNoticeNews.newsCreateTime).ToString(= xmlDoc.CreateElement(= = xmlDoc.CreateElement(= 

============代碼部分完成====================

安裝windows服務:

需要寫一個windows服務安裝的批處理和卸載的批處理,都放在windows服務項目的bin/Debug文件夾下。

安裝服務,install.bat代碼:

%SystemRoot%\Microsoft.NET\Framework\v4.= 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.\installutil.exe /u GameTradingNewsService.exe
GameTradingNewsService.exe 是windows服務項目編譯以後bin文件中的exe程序的名稱

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



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