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 }