TrackBack 的实现原理 及 asp.net代码

来源:互联网 发布:软件测试工程师证书 编辑:程序博客网 时间:2024/05/20 05:53
  作为所谓的Blog三大特征之一的Trackback Ping,在网络上并没有一个真正的规范,它实际上最早是在Moveable发明并开始运用的一种技术,与另外两项被广泛认为是Blog最主要特征的RSS和Permalink相比,RSS本质上是是一种遵循W3C RDF规范的XML格式,Permalink是一种非常通用的静态地址技术,而Trackback Ping目前为止仅仅是在blog程序中得到运用,除了Moveable的一份技术规范文档外,也没有什么权威的标准,尤其在国内,众多blog程序有的支持有的不支持,有的有限支持,甚至还有因标准不一致而不能互相通信的(参见《blog is dead(blog已死)》http://blog.igooi.com/archive/2005/10/28/6716.aspx)。

  但是作为开发人员,我们不需要去讨论或者争论Trackback是不是死了、它会不会带来恶意Spam这些问题,就像垃圾邮件的存在,并不影响电子邮件的技术进步和使用一样。对于开发人员来讲,既然Trackback被认为是Blog的三大技术之一,而且blog程序的用户有这种需求,那我们在开发blog的时候,就应该包含这项技术。而且,我们应该尽可能地使我们开发的技术符合标准,或者规范,至少让它发挥作用。

  Trackback Ping是由Moveable Type发明的规范,那么在没有更权威的标准之前,我们使用这项技术,当然应该以他们的规范为准,这里是他们的Trackback技术规范文档:http://www.movabletype.org/docs/mttrackback.html

  Trackback的完整实现至少包含两个方面,其一:客户端发送Trackback Ping;其二:服务器端接收和处理Trackback Ping,并向客户端返回处理结果。然后,根据需要我们可以考虑在客户端接收或者不接收,处理或者不处理返回的信息。下面是具体的代码:

         /// 作 用:向指定的URL发送Trackback Ping,并根据服务器端返回的信息,提示用户处理情况。参数必须Server.URLEncode
        
///目标URL,也即所引用的blog所提供的引用地址
        
///我的Blog的URL
        
///我的blog站点名称
        
///当前这篇blog的标题
        
///当前这篇blog的摘要
        
/// 返回结果:字符串,以“|”分隔,第一部分为数字,0表示成功,1表示有错;第二部分是具体信息。

        public static int Send(string RemoteUrl, string MyBlogURL, string MyBlogName, string MyBlogTitle, string MyBlogExcerpt)
        
{
            
//’构造要发送的请求内容
            try
            
{
                
string strPostInfo = “title=” + MyBlogTitle;
                strPostInfo 
+= “&url=” + MyBlogURL;
                strPostInfo 
+= “&excerpt=” + MyBlogExcerpt;
                strPostInfo 
+= “&blog_name=” + MyBlogName;

                
byte[] strs = System.Text.Encoding.Default.GetBytes(strPostInfo);

                HttpWebRequest myRequest 
= (HttpWebRequest)WebRequest.Create(RemoteUrl);

                myRequest.Method 
= “POST”;
                myRequest.ContentType 
= “application/x-www-form-urlencoded”;
                myRequest.ContentLength 
= strs.Length;
                Stream newStream 
= myRequest.GetRequestStream();
                
// 发送数据
                newStream.Write(strs, 0, strs.Length);
                newStream.Close();
                
return 1;
            }

            
catch (System.Exception es)
            
{
                
return 0;
            }

        }