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

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

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


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