لقد كتبت للتو مقالًا تقنيًا بنفسي، من فضلك أعطني نصيحتك. ها ها .
المقال الأصلي الأصلي: http://bbs.5inet.net/topic.aspx?topicid=181
نحتاج أحيانًا إلى قراءة معلومات المنتدى على صفحة الويب. في ASP التقليدي، نستخدم JS أو IFRAME. لا توجد أي من هذه الطرق مريح للغاية وغير صديق لمحركات البحث. الآن مع .Net لدينا طريقة أخرى.
المتطلبات: يحتاج المنتدى إلى توفير دعم RSS.
الرمز هو كما يلي:
# فئة المهام المنطقة
// هذه فئة مهمة تؤدي مهام محددة
الطبقة العامة RssAsyncTask
{
سلسلة خاصة _rssContent؛
Private AsyncTaskDelegate _dlgt;
سلسلة خاصة rssUrl؛
المنطق المنطقي الخاص _success؛
المنطق العام IsSuccess
{
يحصل
{
عودة _ النجاح؛
}
}
RssAsyncTask العامة (سلسلة rssUrl)
{
this.rssUrl = rssUrl;
}
// إنشاء مندوب.
المفوض المحمي void AsyncTaskDelegate();
public String GetRssContent();
{
إرجاع _rssContent؛
}
الفراغ العام DoTheAsyncTask ()
{
// قدم تأخيرًا مصطنعًا لمحاكاة التأخير
// مهمة غير متزامنة
// خاصية AsyncTimeout.
WebClient wc = new WebClient();
يحاول
{
_rssContent = wc.DownloadString(rssUrl);
_النجاح = صحيح؛
}
قبض (الاستثناء ه)
{
_rssContent = e.Message;
}
أخيراً
{
wc.Dispose();
}
//Thread.Sleep(TimeSpan.FromSeconds(5.0));
}
// حدد الطريقة التي سيتم الاتصال بها
// ابدأ المهمة غير المتزامنة.
IAsyncResult OnBegin العام (مرسل الكائن، EventArgs e،
AsyncCallback cb، الكائن extraData)
{
//_rssContent = "بدء مهمة غير متزامنة.";
_dlgt = new AsyncTaskDelegate(DoTheAsyncTask);
نتيجة IAsyncResult = _dlgt.BeginInvoc(cb, extraData)
;
}
// حدد الطريقة التي سيتم استدعاؤها متى
// انتهت المهمة غير المتزامنة.
الفراغ العام OnEnd (IAsyncResult ar)
{
//_rssContent = "اكتملت المهمة غير المتزامنة.";
_dlgt.EndInvoc(ar);
}
// حدد الطريقة التي سيتم استدعاؤها إذا كانت المهمة
// لم يكتمل خلال فترة المهلة غير المتزامنة.
الفراغ العام OnTimeout (IAsyncResult ar)
{
_rssContent = "فشل إكمال المهمة غير المتزامنة" +
"لأنه تجاوز معلمة AsyncTimeout.";
}
}
#endregion
// يرث عنصر التحكم المخصص من عنصر تحكم مخصص آخر.
الطبقة العامة RArticle
: لوحة ال
{
#خصائص المنطقة
سلسلة rssUrl؛
سلسلة عامة RssUrl
{
الحصول على { العودة rssUrl }
مجموعة { rssUrl = القيمة }
}
int maxRecordNumber = 6;
public int MaxRecordNumber
{
الحصول على {إرجاع رقم السجل الأقصى}
تعيين {maxRecordNumber = القيمة}
}
مهمة
#endregion
RssAsyncTask؛
تجاوز محمي باطل OnInit (EventArgs e)
{
base.OnInit(e);
المهمة = جديد RssAsyncTask(this.rssUrl);
PageAsyncTask asyncTask = new PageAsyncTask(task.OnBegin, Task.OnEnd, Task.OnTimeout, null)
;
Page.ExecuteRegisteredAsyncTasks();
}
static Random r = new Random();
تجاوز محمي عرض باطلة (System.Web.UI.HtmlTextWriter الكاتب)
{
سلسلة rssContent = المهمة.GetRssContent();
XmlDocument doc = null;
إذا (المهمة.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.WriteBeginTag
("div");
WriteAttribute("class", "child2");
حق (كاتب)؛
Writer.WriteBeginTag("ul");
Right(writer);
if (doc != null)
{
# نجاح المنطقة
XmlNodeList items = doc.SelectNodes("rss/channel/item");
List<XmlNode> العقد = قائمة جديدة<XmlNode>();
foreach (عقدة XmlNode في العناصر)
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;
إرجاع (int)ts.TotalSeconds;
}));
for (int i = 0; i < maxRecordNumber; i++)
{
XmlNode العقدة = العقد[i];
الكاتب.WriteBeginTag("لي");
حق (كاتب)؛
Writer.WriteBeginTag("a");
الكاتب.WriteAttribute("target", "_blank");
Writer.WriteAttribute("href",node.SelectSingleNode("link").InnerText);
حق (كاتب)؛
Writer.Write(node.SelectSingleNode("title").InnerText);
الكاتب.WriteEndTag("a");
الكاتب.WriteEndTag("لي");
}
#endregion
}
آخر
{
Writer.WriteBeginTag("pre");
حق (كاتب)؛
Writer.Write(task.GetRssContent());
الكاتب.WriteEndTag("قبل");
}
الكاتب.WriteEndTag("ul");
Writer.WriteEndTag("div");
RenderChildren(writer);
base.RenderEnd(writer);
}
}
كيفية الاستخدام:
1. مراقبة التسجيل
<%@ تسجيل التجميع = "عناصر التحكم" مساحة الاسم = "Limited.Controls" TagPrefix = "lm" %>
2. اتصل
<lm:RArticle ID="RArticle1" runat="server" MaxRecordNumber="10" RssUrl=" http://bbs.5inet.net/rss.aspx " />
من أجل البساطة، لا يستخدم هذا البرنامج تقنيات مثل التخزين المؤقت، إذا لزم الأمر، يرجى إضافته بنفسك.