在asp.net中使用异步同步rss
生活随笔
收集整理的這篇文章主要介紹了
在asp.net中使用异步同步rss
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
| 有的時候我們需要在網(wǎng)頁里讀取論壇的信息,在傳統(tǒng)ASP的時候我們使用的是JS或者是IFRAME,這兩種方式都不是很方便,而且對搜索引擎不友好?,F(xiàn)在有了.Net,我們有了另一種方式。 要求:論壇需要提供RSS支持。 代碼如下: |
??2????//這是一個任務類,執(zhí)行具體的任務
??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: <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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SharePoint 2007 Back
- 下一篇: timestamp 数据类型