Pingback&Trackback
今天這篇文章主要向大家講述一下Blog系統中應用最多的,具有Web2.0特性的,也是一種標準化的——Pingback&Trackback。分析一下BlogEngine.Net提供的比較全面的Pingback&Trackback支援。本文內容相對來說比較獨立,如果您對整個系列感興趣請參照這裡。
Pingback&Trackback參考
簡單地說,Pingback&Trackback是部落格在連結、引用其他部落格內容時通知對方部落格的一種自動機制,告知對方連結位置及可能包含一定的摘要文本(視情況而定)。這樣帶來的好處是顯而易見的,對Pingback&Trackback寄件者來說,避免了手動通知對方的麻煩;對Pingback&Trackback接收者而言,則可以隨時掌握自己的某篇文章被什麼人連結及具體連結資訊,等等。例如:
部落格A發布了一篇文章;部落格B看到後,發布評論、引用、介紹部落格A上該篇文章的貼子;但此時部落格A是無從知道部落格B上對自己文章的引用情況的,要讓部落格A知道,部落格B須:在部落格A上留言,介紹自己對該篇文章的看法,比如說“在我的部落格發布了一篇文章,也討論這個問題——”,並附上相應頁面的連結;向部落格A發送E-mail,說明自己對該篇文章的進一步討論,同時,也許希望部落格A能在頁面上放上自己的連結,以協助對這一話題有興趣的使用者能找到自己的部落格;Pingback&Trackback實現的功能便是將第三個步驟自動化了,再也不需這麼一個繁瑣的過程,即:部落格A發布了一篇文章;部落格B看到後,發布評論、引用、介紹部落格A上該篇文章的貼子;在文章發布時,部落格B即自動向部落格A發送Pingback&Trackback;部落格A收到相應的Pingback&Trackback,如果未設定人工審核,相應的內容即會出現在部落格A該文的留言中,如果設定了人工審核,則出現在部落格A的審核列表中,部落格A認為不是spam後將其發布在留言中。
BlogEngine.Net中的Pingback&Trackback實現
BlogEngine.Net中的Pingback&Trackback的實現主要涉及到以下幾組檔案:
1.Web網站App_Code/Extensions中:SendPings.cs
2.BlogEngine.Core的Ping中:PingService.cs、Manager.cs、Pingback.cs、Trackback.cs
3.BlogEngine.Core的Web/HttpHandlers中:PingbackHandler.cs、TrackbackHandler.cs
從BlogEngine.Net中的Pingback&Trackback的具體實現來看,Pingback和Trackback的區別只在於資料的交換格式上,Pingback和PingService主要是使用標準的XMLRPC來完成資料的交換(上一篇文章中有部分涉及),而Trackback主要的request是使用類似的下面的格式完成:title={0}&url={1}&excerpt={2}&blog_name={3},response同樣是使用XML傳輸
<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><response><error>0</error></response>
但是它們要實現的功能是類似的。
實際上SendPings類是BlogEngine.Net的一個Extension(類具有Extension特性,這個後面會有專門的一篇文章來講解),它監聽了Page.Saved和Post.Saved:
1 /// <summary>
2 /// Hooks up an event handler to the Post.Saved event.
3 /// </summary>
4 static SendPings()
5 {
6 Post.Saved += new EventHandler<SavedEventArgs>(Post_Saved);
7 Page.Saved += new EventHandler<SavedEventArgs>(Post_Saved);
8 }