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

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-11   浏览: 95 ::
收藏到网摘: 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