Saya sendiri baru saja menulis artikel teknis, tolong beri saya saran Anda. Ha ha.
Artikel asli asli: http://bbs.5inet.net/topic.aspx?topicid=181
Terkadang kita perlu membaca informasi forum di halaman web. Dalam ASP tradisional, kita menggunakan JS atau IFRAME sangat nyaman dan tidak bersahabat dengan mesin pencari. Sekarang dengan .Net kita punya cara lain.
Persyaratan: Forum perlu menyediakan dukungan RSS.
Kodenya adalah sebagai berikut:
#kelas tugas wilayah
//Ini adalah kelas tugas yang melakukan tugas tertentu
RssAsyncTask kelas publik
{
String pribadi _rssContent;
pribadi AsyncTaskDelegate _dlgt;
string pribadi rssUrl;
bool pribadi _success;
bool publik IsSuccess
{
mendapatkan
{
kembali _sukses;
}
}
RssAsyncTask publik(string rssUrl)
{
ini.rssUrl = rssUrl;
}
// Buat delegasi.
delegasi yang dilindungi batal AsyncTaskDelegate();
String publik GetRssContent()
{
kembalikan _rssContent;
}
kekosongan publik DoTheAsyncTask()
{
// Memperkenalkan penundaan buatan untuk menyimulasikan penundaan
// tugas asinkron
// Properti AsyncTimeout.
Klien Web wc = Klien Web baru();
mencoba
{
_rssContent = wc.DownloadString(rssUrl);
_sukses = benar;
}
tangkapan (Pengecualian e)
{
_rssContent = e.Pesan;
}
Akhirnya
{
wc.Buang();
}
//Thread.Sleep(TimeSpan.FromSeconds(5.0));
}
// Tentukan metode yang akan dipanggil
// memulai tugas asinkron.
public IAsyncResult OnBegin(pengirim objek, EventArgs e,
AsyncCallback cb, objek extraData)
{
//_rssContent = "Memulai tugas asinkron.";
_dlgt = new AsyncTaskDelegate(DoTheAsyncTask);
Hasil IAsyncResult = _dlgt.BeginInvoke(cb, extraData)
;
}
// Tentukan metode yang akan dipanggil kapan
// tugas asinkron telah berakhir.
kekosongan publik OnEnd(IAsyncResult ar)
{
//_rssContent = "Tugas asinkron selesai.";
_dlgt.EndInvoke(ar);
}
// Tentukan metode yang akan dipanggil jika tugasnya
// tidak diselesaikan dalam interval batas waktu asinkron.
public void OnTimeout(IAsyncResult ar)
{
_rssContent = "Tugas asinkron gagal diselesaikan " +
"karena melebihi parameter AsyncTimeout.";
}
}
#endregion
//Kontrol kustom mewarisi kontrol kustom lain.
Artikel R kelas publik
: LPanel
{
#properti wilayah
string rssUrl;
string publik RssUrl
{
dapatkan { kembalikan rssUrl }
setel { rssUrl = nilai }
}
int maxRecordNumber = 6;
int publik MaxRecordNumber
{
dapatkan { kembalikan maxRecordNumber;
setel { maxRecordNumber = nilai }
}
tugas
#endregion
RssAsyncTask;
override terproteksi void OnInit(EventArgs e)
{
base.OnInit(e);
tugas = RssAsyncTask baru(ini.rssUrl);
PageAsyncTask asyncTask = HalamanAsyncTask baru(task.OnBegin, task.OnEnd, task.OnTimeout, null)
;
Halaman.ExecuteRegisteredAsyncTasks();
}
statis Acak r = Acak baru();
override yang dilindungi void Render (penulis System.Web.UI.HtmlTextWriter)
{
string rssContent = tugas.GetRssContent();
Dokumen XmlDokumen = null;
jika (tugas.IsSukses)
{
doc = XmlDocument baru();
doc.LoadXml(rssContent);
this.Judul = doc.SelectSingleNode("rss/channel/title").InnerText;
this.TitleNavigateUrl = doc.SelectSingleNode("rss/channel/link").InnerText;
ini.ShowTitle = benar;
}
base.RenderBegin(penulis);
penulis.WriteBeginTag("div");
writer.WriteAttribute("kelas", "anak2");
Benar (penulis);
penulis.WriteBeginTag("ul");
Benar(penulis);
jika (doc!= null)
{
#region sukses
XmlNodeList item = doc.SelectNodes("rss/channel/item");
Daftar<XmlNode> node = Daftar baru<XmlNode>();
foreach (simpul XmlNode dalam item)
node.Add(node);
//Gunakan obat generik untuk mengurutkan tanggal dalam urutan terbalik
node.Sort(Perbandingan baru<XmlNode>(delegasi(XmlNode n1, XmlNode n2)
{
DateTime d1 = DateTime.Parse(n1.SelectSingleNode("pubDate").InnerText);
DateTime d2 = DateTime.Parse(n2.SelectSingleNode("pubDate").InnerText);
Rentang Waktu ts = d2 - d1;
kembali (int)ts.TotalSeconds;
}));
untuk (int i = 0; i < maxRecordNumber; i++)
{
XmlNode simpul = simpul[i];
penulis.WriteBeginTag("li");
Benar (penulis);
penulis.WriteBeginTag("a");
penulis.WriteAttribute("target", "_blank");
writer.WriteAttribute("href", node.SelectSingleNode("link").InnerText);
Benar (penulis);
writer.Write(node.SelectSingleNode("judul").InnerText);
penulis.WriteEndTag("a");
penulis.WriteEndTag("li");
}
#wilayah akhir
}
kalau tidak
{
writer.WriteBeginTag("pra");
Benar (penulis);
penulis.Menulis(tugas.GetRssContent());
writer.WriteEndTag("pra");
}
penulis.WriteEndTag("ul");
penulis.WriteEndTag("div");
RenderChildren(
basis penulis.RenderEnd(penulis);
}
}
Cara menggunakan:
1. Kontrol pendaftaran
<%@ Daftar Majelis="Kontrol" Namespace="Limited.Controls" TagPrefix="lm" %>
2. Telepon
<lm:RArticle ID="RArticle1" runat="server" MaxRecordNumber="10" RssUrl=" http://bbs.5inet.net/rss.aspx " />
Demi kesederhanaan, program ini tidak menggunakan teknologi seperti caching. Jika perlu, silakan tambahkan sendiri.