源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c#使用windows服务更新站点地图的详细示例

  • 时间:2020-03-31 18:38 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c#使用windows服务更新站点地图的详细示例
由于公司平台访问人数逐渐增多,公司项目的数据库已经几次出现宕机现象。为减轻数据库压力,我上个月对公司项目做了下调整。把新闻板块提取出来单独一个站点,单独一个数据库。减少了主站点和数据库的负担和压力。 但放在线上一个月,新闻新的发布数量最少已经有500篇左右。百度只收录了70个左右,于是想到可能是没有站点地图造成的。但怎么定时更新站点地图呢? 我尝试使用windows服务来定时更新站点地图。 首先需要了解下几个问题。 [b]1、百度收录的站点地图(sitemap)的格式。[/b]详情请查看该链接:查看 目前我只用到了xml格式的站点地图,就讲下xml格式的站点地图。 [b]xml格式:[/b] [img]http://files.jb51.net/file_images/article/201404/201404151137132.png[/img] [b]各个标签的解释:[/b] <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最高。 [b]2、站点地图更新的频率问题[/b] 由于公司新闻更新一般时间固定在9:30-18:00。每天大概发布10——50篇新闻,所以我设想更新站点地图的时间在:9:00——19:00,每3个小时更新一次,其他时间不做任何操作,降低数据库查询的负担。 开始写windows 服务。 1、新建windows服务,给windows起个名字 [img]http://files.jb51.net/file_images/article/201404/201404151137133.jpg[/img] [b]2、添加安装程序[/b] 双击Service1.cs进入视图界面,右键,选择“添加安装程序” [img]http://files.jb51.net/file_images/article/201404/201404151137134.jpg[/img] 添加以后的效果。 [img]http://files.jb51.net/file_images/article/201404/201404151137135.jpg[/img] serviceInstaller1:服务安装组件。(主要用于设置 服务名称、服务描述、服务是否开机启动或延迟启动、服务启动方式等) serviceProcessInstaller1:服务进程安装组件(主要用户设置运行服务的账户类型,如:User、LocalService、NetworkService、LocalSystem等) [b]serviceInstaller1的属性设置(快捷键F4):[/b] [img]http://files.jb51.net/file_images/article/201404/201404151137136.jpg[/img] [b]属性说明:[/b] DelayedAutoStart:设置是否自动启动 Description:服务描述 ServiceName:服务名称 StartType:启动类型。有三种:Manual(启动)、Automatic(自动)、Disabled(不启动) [b]serviceProcessInstaller1属性设置(快捷键F4):[/b] [img]http://files.jb51.net/file_images/article/201404/201404151137137.jpg[/img] [b]属性说明:[/b] Account:运行服务的账户类型。有四种:User、LocalService、NetworkService、LocalSystem。 我选择的是LocalSystem,意思是:当前系统都能运行。 [b]3、定时触发问题的一些需要注意的误区。[/b] 定时触发,大家肯定想到的是Timer组件,但一定要记住。windows服务下是没有Timer控件的。。。。这里看到的Timer组件是不会定时触发的,需要自己实现Timer定时触发的事件,本人曾在此坑深陷多时。。。。 [img]http://files.jb51.net/file_images/article/201404/201404151137138.jpg[/img] 由于本人为了实现定时触发的事件可控性和可修改性。增加了一个配置文件。配置文件添加方式如图: windows服务项目——右键——添加——新建项 [img]http://files.jb51.net/file_images/article/201404/201404151137139.jpg[/img] [b]配置文件设置:[/b] [img]http://files.jb51.net/file_images/article/201404/2014041511371310.jpg[/img] 4、定时windows服务代码:
[u]复制代码[/u] 代码如下:
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):
[u]复制代码[/u] 代码如下:
        /// <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代码:
[u]复制代码[/u] 代码如下:
%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代码:
[u]复制代码[/u] 代码如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u GameTradingNewsService.exe GameTradingNewsService.exe 是windows服务项目编译以后bin文件中的exe程序的名称
至此,一个服务是彻底完成。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部