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

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

代码如下:

1taskclasstask class#regiontask class2//这是一个任务类,执行具体的任务3publicclassRssAsyncTask
4...{
5privateString _rssContent;
6privateAsyncTaskDelegate _dlgt;
7privatestringrssUrl;
8privatebool_success;
910publicboolIsSuccess
11...{
12get13...{
14return_success;
15}
16}
1718publicRssAsyncTask(stringrssUrl)
19...{
20this.rssUrl=rssUrl;
21}
2223//Create delegate.24protecteddelegatevoidAsyncTaskDelegate();
2526publicString GetRssContent()
27...{
28return_rssContent;
29}
30publicvoidDoTheAsyncTask()
31...{
32//Introduce an artificial delay to simulate a delayed33//asynchronous task. Make this greater than the34//AsyncTimeout property.35WebClient wc=newWebClient();
36try37...{
38_rssContent=wc.DownloadString(rssUrl);
39_success=true;
40}
41catch(Exception e)
42...{
43_rssContent=e.Message;
44}
45finally46...{
47wc.Dispose();
48}
49//Thread.Sleep(TimeSpan.FromSeconds(5.0));50}
5152//Define the method that will get called to53//start the asynchronous task.54publicIAsyncResult OnBegin(objectsender, EventArgs e,
55AsyncCallback cb,objectextraData)
56...{
57//_rssContent = "Beginning async task.";5859_dlgt=newAsyncTaskDelegate(DoTheAsyncTask);
60IAsyncResult result=_dlgt.BeginInvoke(cb, extraData);
6162returnresult;
63}
6465//Define the method that will get called when66//the asynchronous task is ended.67publicvoidOnEnd(IAsyncResult ar)
68...{
69//_rssContent = "Asynchronous task completed.";70_dlgt.EndInvoke(ar);
71}
7273//Define the method that will get called if the task74//is not completed within the asynchronous timeout interval.75publicvoidOnTimeout(IAsyncResult ar)
76...{
77_rssContent="Ansynchronous task failed to complete"+78"because it exceeded the AsyncTimeout parameter.";
79}
80}
81#endregion
8283//一个自定义的控件,继承自另一个自定义控件。84publicclassRArticle
85: LPanel
86...{
87propertiesproperties#regionproperties88stringrssUrl;
8990publicstringRssUrl
91...{
92get...{returnrssUrl; }93set...{ rssUrl=value; }94}
9596intmaxRecordNumber=6;
9798publicintMaxRecordNumber
99...{
100get...{returnmaxRecordNumber; }101set...{ maxRecordNumber=value; }102}
103#endregion
104105RssAsyncTask task;
106protectedoverridevoidOnInit(EventArgs e)
107...{
108base.OnInit(e);
109task=newRssAsyncTask(this.rssUrl);
110PageAsyncTask asyncTask=newPageAsyncTask(task.OnBegin, task.OnEnd, task.OnTimeout,null);
111112Page.RegisterAsyncTask(asyncTask);
113Page.ExecuteRegisteredAsyncTasks();
114}
115116staticRandom r=newRandom();
117protectedoverridevoidRender(System.Web.UI.HtmlTextWriter writer)
118...{
119stringrssContent=task.GetRssContent();
120XmlDocument doc=null;
121if(task.IsSuccess)
122...{
123doc=newXmlDocument();
124doc.LoadXml(rssContent);
125126this.Title=doc.SelectSingleNode("rss/channel/title").InnerText;
127this.TitleNavigateUrl=doc.SelectSingleNode("rss/channel/link").InnerText;
128this.ShowTitle=true;
129}
130base.RenderBegin(writer);
131132writer.WriteBeginTag("div");
133writer.WriteAttribute("class","child2");
134Right(writer);
135writer.WriteBeginTag("ul");
136Right(writer);
137138if(doc!=null)
139...{
140successsuccess#regionsuccess141142XmlNodeList items=doc.SelectNodes("rss/channel/item");
143List<XmlNode>nodes=newList<XmlNode>();
144foreach(XmlNode nodeinitems)
145nodes.Add(node);
146147//使用范型进行日期的倒序排列148nodes.Sort(newComparison<XmlNode>(delegate(XmlNode n1, XmlNode n2)
149...{
150DateTime d1=DateTime.Parse(n1.SelectSingleNode("pubDate").InnerText);
151DateTime d2=DateTime.Parse(n2.SelectSingleNode("pubDate").InnerText);
152TimeSpan ts=d2-d1;
153return(int)ts.TotalSeconds;
154}
));
155156for(inti=0; i<maxRecordNumber; i++)
157...{
158XmlNode node=nodes[i];
159writer.WriteBeginTag("li");
160Right(writer);
161writer.WriteBeginTag("a");
162writer.WriteAttribute("target","_blank");
163writer.WriteAttribute("href", node.SelectSingleNode("link").InnerText);
164Right(writer);
165writer.Write(node.SelectSingleNode("title").InnerText);
166writer.WriteEndTag("a");
167writer.WriteEndTag("li");
168}
169170#endregion
171}
172else173...{
174writer.WriteBeginTag("pre");
175Right(writer);
176writer.Write(task.GetRssContent());
177writer.WriteEndTag("pre");
178}
179180writer.WriteEndTag("ul");
181writer.WriteEndTag("div");
182183RenderChildren(writer);
184185base.RenderEnd(writer);
186}
187}
188

使用方法:
一、注册控件

CODE:
<%@ Register Assembly="Controls" Namespace="Limited.Controls" TagPrefix="lm" %>

二、调用

CODE:
<lm:RArticle ID="RArticle1" runat="server" MaxRecordNumber="10" RssUrl="http://bbs.5inet.net/rss.aspx" />

为了简便起见,本程序就没有使用缓存之类的技术了,如有必要,请自行添加。
 

转载于:https://www.cnblogs.com/zhoufoxcn/archive/2006/10/09/2515890.html

在asp.net中使用异步同步rss相关推荐

  1. asp.net中的异步页面

    要想了解asp.net 2.0的异步页的处理过程,先列出页面的生命周期: 1 :init 事件: 页面初始化 ,初始化设置. 2: loadviewstate方法: 加载视图状态, 填充viewsta ...

  2. ajax异步查询demo,ASP.NET中AJAX的异步加载(Demo演示)

    此次的demo是一个页面,页面上有两行字,然后后面用ajax,使用一个下拉框去替换第一行文字[/code] 第一个是被替换的网页 var xmlhttprequest; function create ...

  3. python同步异步_python中Tornado的同步与异步I/O的介绍(附示例)

    本篇文章给大家带来的内容是关于python中Tornado的同步与异步I/O的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 协程是Tornado种推荐的编程方式,使用 ...

  4. 使用ASP.NET MVC Futures 中的异步Action

    在ASP.NET MVC中使用异步是比较麻烦的,从RC1版开始ASP.NET MVC Futures中提供了几个支持异步的类. 相关的类有:AsyncActionDescriptor.AsyncCon ...

  5. 一起谈.NET技术,ASP.NET MVC2.0在Tab页中实现异步无刷新分页

    概述 很多地方都存在以Tab页来呈现数据的方式,比如网易.新浪.搜狐.QQ等知名的门户网站的首页,还有大家熟知的博客园首页,都是用了tab页来显示数据.大家之所以喜欢用Tab,因为它能大大的增加显示数 ...

  6. js中的异步与同步,解决由异步引起的问题

    js中的异步与同步,解决由异步引起的问题 参考文章: (1)js中的异步与同步,解决由异步引起的问题 (2)https://www.cnblogs.com/zhuchenglin/p/7651990. ...

  7. 使用ASP.NET MVC Futures 中的异步Action 【转】

    之前看过老赵这两篇文章.也研究了一下老赵异步的实现方式. 不过感觉自己扩展的话,在ASP.NET MVC中使用异步还真是麻烦,刚好看到从RC1版开始 ASP.NET MVC Futures中提供了几个 ...

  8. JavaScript中的异步、同步

    要理解JS中的异步.同步,需要先了解JS代码的执行过程和Event Loop. JavaScript代码的执行过程 程序需要执行的操作都会被放入Call Stack(A LIFO (Last In, ...

  9. linux编写驱动后write已杀死_《Linux4.0设备驱动开发详解》笔记--第九章:Linux设备驱动中的异步通知与同步I/O...

    在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问.因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似"中断"的异步通 ...

最新文章

  1. 孙琦:大数据思维助力我探究能源颗粒机理 | 提升之路系列(四)
  2. select选择框实现跳转
  3. 实战SSM_O2O商铺_31【商品】商品添加之View层的实现
  4. CentOS7中通过npm的方式安装Node-RED
  5. 【2012百度之星/初赛下】B:网页聚类
  6. asp.net 研发,测试,或现网....非本机环境采用附加进程的方式在本地调试
  7. 如何在Windows、Linux中获取主机的网络信息和公网地址
  8. P3185-[HNOI2007]分裂游戏【SG函数】
  9. javafx 界面_JavaFX的科幻用户界面第1部分
  10. redis源码剖析(四)跳表
  11. 使用Redis作为分布式锁的错误用法
  12. ubuntu下qt+科大讯飞语音库的导入方法
  13. listary提升开发效率
  14. 数学建模笔记——评价类模型(一)
  15. 各种常用的 Win32Api 汇总(持续更新中. . .)
  16. Db4o数据库:细说查询
  17. 狂团KtAdmin框架正式免费开源发布,助力独立版SAAS系统快速开发!
  18. java 门票订购系统_基于jsp的景区门票订购系统-JavaEE实现景区门票订购系统 - java项目源码...
  19. 计算多边形中心点坐标的方法
  20. 弘辽科技:淘宝宝贝上下架有哪些规则?该如何优化?

热门文章

  1. 观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)
  2. Nagios 监控系列学习 —— 简介和安装
  3. CentOS6.3 下启动Oracle service和listener
  4. 【原创】VSFTP: Login failure: 530 Login incorrect的解决办法
  5. 【专题六】虚拟化实施人才和培训的瓶颈如何解决? ——虚拟化人才逆势抢手 5项技能最关键...
  6. 关于logrotate工具的日志切割
  7. hibernate学习(4)
  8. 在VS2015中编写x86汇编
  9. 工作中涉及运维知识点的汇总
  10. 媒体洞察 | 让企业自由发展的云时代