动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ ASP.NET技巧 ]的信息



本月文章推荐
.将Web站点下的绝对路径转换为虚拟.
.ASP.NET 2.0 中的 Theme 功能.
.压力监测程序sqlserver和MYSQL版.
.开发基于ASP.NET WebService的图.
.Url Rewriting with Regex for A.
.在DataGrid控件中编辑数据项.
.ASP.Net防止刷新自动触发事件的解.
.如何让.Net控件在设计时Initiali.
.asp.net身份验证和授权.
.用ASP.NET包装第三方组件以提供服.
.ASP.NET2.0 WebRource,开发微调按.
.asp.net 2.0 缓存(理论篇) .
.ASP.NET 2.0“插件”说.
.ASP.NET Atlas对JavaScript的扩展.
.在Java和.NET平台的加密术比较.
.URL重写可删节日期模式---正则表.
.在ASP.NET 2.0中使用RDLC格式的报.
.存储过程的分析.
.修改asp.net2.0内置成员管理中的.
.ASP.NET设计网络硬盘之文件夹实现.

在asp.net页面中使用异步读取

发表日期:2006-9-21 |


刚亲自撰写一篇技术文章,请大家多指教。哈哈。
原文首发:http://bbs.5inet.net/topic.aspx?topicid=181

有的时候我们需要在网页里读取论坛的信息,在传统ASP的时候我们使用的是JS或者是IFRAME,这两种方式都不是很方便,而且对搜索引擎不友好。现在有了.Net,我们有了另一种方式。

要求:论坛需要提供RSS支持。

代码如下:


    #region task class
    //这是一个任务类,执行具体的任务
    public class RssAsyncTask
    {
        private String _rssContent;
        private AsyncTaskDelegate _dlgt;
        private string rssUrl;
        private bool _success;

        public bool IsSuccess
        {
            get
            {
                return _success;
            }
        }

        public RssAsyncTask(string rssUrl)
        {
            this.rssUrl = rssUrl;
        }

        // Create delegate.
        protected delegate void AsyncTaskDelegate();

        public String GetRssContent()
        {
            return _rssContent;
        }
        public void DoTheAsyncTask()
        {
            // Introduce an artificial delay to simulate a delayed
            // asynchronous task. Make this greater than the
            // AsyncTimeout property.
            WebClient wc = new WebClient();
            try
            {
                _rssContent = wc.DownloadString(rssUrl);
                _success = true;
            }
            catch (Exception e)
            {
                _rssContent = e.Message;
            }
            finally
            {
                wc.Dispose();
            }
            //Thread.Sleep(TimeSpan.FromSeconds(5.0));
        }

        // Define the method that will get called to
        // start the asynchronous task.
        public IAsyncResult OnBegin(object sender, EventArgs e,
            AsyncCallback cb, object extraData)
        {
            //_rssContent = "Beginning async task.";

            _dlgt = new AsyncTaskDelegate(DoTheAsyncTask);
            IAsyncResult result = _dlgt.BeginInvoke(cb, extraData);

            return result;
        }

        // Define the method that will get called when
        // the asynchronous task is ended.
        public void OnEnd(IAsyncResult ar)
        {
            //_rssContent = "Asynchronous task completed.";
            _dlgt.EndInvoke(ar);
        }

        // Define the method that will get called if the task
        // is not completed within the asynchronous timeout interval.
        public void OnTimeout(IAsyncResult ar)
        {
            _rssContent = "Ansynchronous task failed to complete " +
                "because it exceeded the AsyncTimeout parameter.";
        }
    }
    #endregion

    //一个自定义的控件,继承自另一个自定义控件。
    public class RArticle
        : LPanel
    {
        #region properties
        string rssUrl;

        public string RssUrl
        {
            get { return rssUrl; }
            set { rssUrl = value; }
        }

        int maxRecordNumber = 6;

        public int MaxRecordNumber
        {
            get { return maxRecordNumber; }
            set { maxRecordNumber = value; }
        }
        #endregion

        RssAsyncTask task;
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            task = new RssAsyncTask(this.rssUrl);
            PageAsyncTask asyncTask = new PageAsyncTask(task.OnBegin, task.OnEnd, task.OnTimeout, null);

            Page.RegisterAsyncTask(asyncTask);
            Page.ExecuteRegisteredAsyncTasks();
        }

        static Random r = new Random();
        protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
            string rssContent = task.GetRssContent();
            XmlDocument doc = null;
            if (task.IsSuccess)
            {
                doc = new XmlDocument();
                doc.LoadXml(rssContent);

                this.Title = doc.SelectSingleNode("rss/channel/title").InnerText;
                this.TitleNavigateUrl = doc.SelectSingleNode("rss/channel/link").InnerText;
                this.ShowTitle = true;
            }
            base.RenderBegin(writer);

            writer.WriteBeginTag("div");
            writer.WriteAttribute("class", "child2");
            Right(writer);
            writer.WriteBeginTag("ul");
            Right(writer);

            if (doc != null)
            {
                #region success

                XmlNodeList items = doc.SelectNodes("rss/channel/item");
                List<XmlNode> nodes = new List<XmlNode>();
                foreach (XmlNode node in items)
                    nodes.Add(node);

                //使用范型进行日期的倒序排列
                nodes.Sort(new Comparison<XmlNode>(delegate(XmlNode n1, XmlNode n2)
                {
                    DateTime d1 = DateTime.Parse(n1.SelectSingleNode("pubDate").InnerText);
                    DateTime d2 = DateTime.Parse(n2.SelectSingleNode("pubDate").InnerText);
                    TimeSpan ts = d2 - d1;
                    return (int)ts.TotalSeconds;
                }));

                for (int i = 0; i < maxRecordNumber; i++)
                {
                    XmlNode node = nodes[i];
                    writer.WriteBeginTag("li");
                    Right(writer);
                    writer.WriteBeginTag("a");
                    writer.WriteAttribute("target", "_blank");
                    writer.WriteAttribute("href", node.SelectSingleNode("link").InnerText);
                    Right(writer);
                    writer.Write(node.SelectSingleNode("title").InnerText);
                    writer.WriteEndTag("a");
                    writer.WriteEndTag("li");
                }

                #endregion
            }
            else
            {
                writer.WriteBeginTag("pre");
                Right(writer);
                writer.Write(task.GetRssContent());
                writer.WriteEndTag("pre");
            }

            writer.WriteEndTag("ul");
            writer.WriteEndTag("div");

            RenderChildren(writer);

            base.RenderEnd(writer);
        }
    }
使用方法:
一、注册控件


<%@ Register Assembly="Controls" Namespace="Limited.Controls" TagPrefix="lm" %>
二、调用


<lm:RArticle ID="RArticle1" runat="server" MaxRecordNumber="10" RssUrl="http://bbs.5inet.net/rss.aspx" />
为了简便起见,本程序就没有使用缓存之类的技术了,如有必要,请自行添加。

上一篇:一个通用的分页类 人气:6249
下一篇:ASP.NET2.0调用MySql的存储过程 人气:4929
浏览全部asp.net的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-23 Menalto Gallery v2.3 Rc1 多国语
2008-7-23 深度学习网址导航系统 v2.6.1
2008-7-23 因特达crm2008客户关系管理系统
2008-7-23 60度 CMS v1.0 Build 080723
2008-7-23 幻影动漫网视频系统(Ppdong) v1.
2008-7-23 好易祝福墙 2008
2008-7-23 APJE私服发布系统 v2.0 PHP版
2008-7-23 毕业论文在线指导系统源码
2008-7-23 Jacky法律在线网站源码
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵