当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 利用Windows系统服务自动更新网站

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

ASP.NET 中的 利用Windows系统服务自动更新网站


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-11   浏览: 262 ::
收藏到网摘: n/a

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

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