日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在asp.net中使用异步同步rss

發布時間:2025/7/14 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在asp.net中使用异步同步rss 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有的時候我們需要在網頁里讀取論壇的信息,在傳統ASP的時候我們使用的是JS或者是IFRAME,這兩種方式都不是很方便,而且對搜索引擎不友好。現在有了.Net,我們有了另一種方式。

要求:論壇需要提供RSS支持。

代碼如下:
??1????task?classtask?class#region?task?class
??
2????//這是一個任務類,執行具體的任務
??3????public?class?RssAsyncTask
??
4????...{
??
5????????private?String?_rssContent;
??
6????????private?AsyncTaskDelegate?_dlgt;
??
7????????private?string?rssUrl;
??
8????????private?bool?_success;
??
9
?
10????????public?bool?IsSuccess
?
11????????...{
?
12????????????get
?
13????????????...{
?
14????????????????return?_success;
?
15????????????}

?
16????????}

?
17
?
18????????public?RssAsyncTask(string?rssUrl)
?
19????????...{
?
20????????????this.rssUrl?=?rssUrl;
?
21????????}

?
22
?
23????????//?Create?delegate.
?24????????protected?delegate?void?AsyncTaskDelegate();
?
25
?
26????????public?String?GetRssContent()
?
27????????...{
?
28????????????return?_rssContent;
?
29????????}

?
30????????public?void?DoTheAsyncTask()
?
31????????...{
?
32????????????//?Introduce?an?artificial?delay?to?simulate?a?delayed?
?33????????????//?asynchronous?task.?Make?this?greater?than?the?
?34????????????//?AsyncTimeout?property.
?35????????????WebClient?wc?=?new?WebClient();
?
36????????????try
?
37????????????...{
?
38????????????????_rssContent?=?wc.DownloadString(rssUrl);
?
39????????????????_success?=?true;
?
40????????????}

?
41????????????catch?(Exception?e)
?
42????????????...{
?
43????????????????_rssContent?=?e.Message;
?
44????????????}

?
45????????????finally
?
46????????????...{
?
47????????????????wc.Dispose();
?
48????????????}

?
49????????????//Thread.Sleep(TimeSpan.FromSeconds(5.0));
?50????????}

?
51
?
52????????//?Define?the?method?that?will?get?called?to
?53????????//?start?the?asynchronous?task.
?54????????public?IAsyncResult?OnBegin(object?sender,?EventArgs?e,
?
55????????????AsyncCallback?cb,?object?extraData)
?
56????????...{
?
57????????????//_rssContent?=?"Beginning?async?task.";
?58
?
59????????????_dlgt?=?new?AsyncTaskDelegate(DoTheAsyncTask);
?
60????????????IAsyncResult?result?=?_dlgt.BeginInvoke(cb,?extraData);
?
61
?
62????????????return?result;
?
63????????}

?
64
?
65????????//?Define?the?method?that?will?get?called?when
?66????????//?the?asynchronous?task?is?ended.
?67????????public?void?OnEnd(IAsyncResult?ar)
?
68????????...{
?
69????????????//_rssContent?=?"Asynchronous?task?completed.";
?70????????????_dlgt.EndInvoke(ar);
?
71????????}

?
72
?
73????????//?Define?the?method?that?will?get?called?if?the?task
?74????????//?is?not?completed?within?the?asynchronous?timeout?interval.
?75????????public?void?OnTimeout(IAsyncResult?ar)
?
76????????...{
?
77????????????_rssContent?=?"Ansynchronous?task?failed?to?complete?"?+
?
78????????????????"because?it?exceeded?the?AsyncTimeout?parameter.";
?
79????????}

?
80????}

?
81????#endregion

?
82
?
83????//一個自定義的控件,繼承自另一個自定義控件。
?84????public?class?RArticle
?
85????????:?LPanel
?
86????...{
?
87????????propertiesproperties#region?properties
?
88????????string?rssUrl;
?
89
?
90????????public?string?RssUrl
?
91????????...{
?
92????????????get?...{?return?rssUrl;?}
?
93????????????set?...{?rssUrl?=?value;?}
?
94????????}

?
95
?
96????????int?maxRecordNumber?=?6;
?
97
?
98????????public?int?MaxRecordNumber
?
99????????...{
100????????????get?...{?return?maxRecordNumber;?}
101????????????set?...{?maxRecordNumber?=?value;?}
102????????}

103????????#endregion

104
105????????RssAsyncTask?task;
106????????protected?override?void?OnInit(EventArgs?e)
107????????...{
108????????????base.OnInit(e);
109????????????task?=?new?RssAsyncTask(this.rssUrl);
110????????????PageAsyncTask?asyncTask?=?new?PageAsyncTask(task.OnBegin,?task.OnEnd,?task.OnTimeout,?null);
111
112????????????Page.RegisterAsyncTask(asyncTask);
113????????????Page.ExecuteRegisteredAsyncTasks();
114????????}

115
116????????static?Random?r?=?new?Random();
117????????protected?override?void?Render(System.Web.UI.HtmlTextWriter?writer)
118????????...{
119????????????string?rssContent?=?task.GetRssContent();
120????????????XmlDocument?doc?=?null;
121????????????if?(task.IsSuccess)
122????????????...{
123????????????????doc?=?new?XmlDocument();
124????????????????doc.LoadXml(rssContent);
125
126????????????????this.Title?=?doc.SelectSingleNode("rss/channel/title").InnerText;
127????????????????this.TitleNavigateUrl?=?doc.SelectSingleNode("rss/channel/link").InnerText;
128????????????????this.ShowTitle?=?true;
129????????????}

130????????????base.RenderBegin(writer);
131
132????????????writer.WriteBeginTag("div");
133????????????writer.WriteAttribute("class",?"child2");
134????????????Right(writer);
135????????????writer.WriteBeginTag("ul");
136????????????Right(writer);
137
138????????????if?(doc?!=?null)
139????????????...{
140????????????????successsuccess#region?success
141
142????????????????XmlNodeList?items?=?doc.SelectNodes("rss/channel/item");
143????????????????List<XmlNode>?nodes?=?new?List<XmlNode>();
144????????????????foreach?(XmlNode?node?in?items)
145????????????????????nodes.Add(node);
146
147????????????????//使用范型進行日期的倒序排列
148????????????????nodes.Sort(new?Comparison<XmlNode>(delegate(XmlNode?n1,?XmlNode?n2)
149????????????????...{
150????????????????????DateTime?d1?=?DateTime.Parse(n1.SelectSingleNode("pubDate").InnerText);
151????????????????????DateTime?d2?=?DateTime.Parse(n2.SelectSingleNode("pubDate").InnerText);
152????????????????????TimeSpan?ts?=?d2?-?d1;
153????????????????????return?(int)ts.TotalSeconds;
154????????????????}
));
155
156????????????????for?(int?i?=?0;?i?<?maxRecordNumber;?i++)
157????????????????...{
158????????????????????XmlNode?node?=?nodes[i];
159????????????????????writer.WriteBeginTag("li");
160????????????????????Right(writer);
161????????????????????writer.WriteBeginTag("a");
162????????????????????writer.WriteAttribute("target",?"_blank");
163????????????????????writer.WriteAttribute("href",?node.SelectSingleNode("link").InnerText);
164????????????????????Right(writer);
165????????????????????writer.Write(node.SelectSingleNode("title").InnerText);
166????????????????????writer.WriteEndTag("a");
167????????????????????writer.WriteEndTag("li");
168????????????????}

169
170????????????????#endregion

171????????????}

172????????????else
173????????????...{
174????????????????writer.WriteBeginTag("pre");
175????????????????Right(writer);
176????????????????writer.Write(task.GetRssContent());
177????????????????writer.WriteEndTag("pre");
178????????????}

179
180????????????writer.WriteEndTag("ul");
181????????????writer.WriteEndTag("div");
182
183????????????RenderChildren(writer);
184
185????????????base.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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。