[C#]利用Windows系统服务自动更新网站

利用Windows系统服务自动更新网站

 

       Tag: windows服务   自动更新 自动发布 网站自动更新

应用背景:作为一个站长,为了管理好网站,也为了讨好搜索引擎,每天都需要在不同的时段更新网站的内容,有的站长需要维护几个网站,每天的工作量可想而知,如果逢年过节,站长没有在电脑旁边或者无法上网,这个维护工作也就无法进行。

       使用原理:本文介绍了一种方法来自动更新网站内容,采用一个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

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏