tiray

博客园 首页 新随笔 联系 订阅 管理

在我的前一篇文章Ping Service--你的博客“Ping”了吗? 中,我介绍了Ping Service技术的一些情况,然后我提到我目前使用的虚拟主机不支持发送Ping命令的功能,这使我决定自己写一个发送Ping命令的桌面程序。

Ping Service的客户端请求目前有两个接口:weblogUpdates.ping 和 weblogUpdates.extendedPing,后者兼容前者。大部分的Ping Service服务器都同时支持这两个接口,但对这两个版本的ping命令通常都按相同方式处理,也就是说都按weblogUpdates.ping方式处理。考虑到今后的发展,我决定在程序中只使用weblogUpdates.extendedPing接口。

weblogUpdates.extendedPing接口的XML RPC请求定义如下:
RPC端点:
就是提供Ping Service的服务器地址,如:http://rpc.weblogs.com/RPC2
调用方法名:
weblogUpdates.extendedPing
参数: (按以下顺序发送)
博客名称
字符串,最大1024个字符。如:“Tiray软件博客”
博客网站地址 
字符串,最大255个字符。 如:“http://www.tiray.net”
博客网站的订阅地址
字符串,最大255个字符。如:“http://www.tiray.net/syndication.axd”
需要检查更新的页面URL
字符串,最大255个字符。 如“http://www.tiray.net/default.aspx”
博客标签
可选,字符串,最大1024个字符。多个标签之间以“|" 分隔。如:“软件开发|.net|c#”

weblogUpdates.extendedPing接口的XML RPC响应包括三个参数:
flerror
布尔型,如果有错误则为1
message
字符串,如果发送请求成功,通常返回的是“Thanks for the ping.”,如果flerror为1,则返回错误信息。
legal
字符串,Ping Service服务提供者的申明,通常为空。weblog.com的legal值是:“You agree that use of the Weblogs.com ping service is governed by the Terms of Use found at www.weblogs.com.”
关于Ping Service客户端的详细说明,请浏览http://www.weblogs.com/api.html,或者可以去http://www.google.com/intl/zh-CN/help/blogsearch/pinging_API.html看一看Google的Ping Service API说明。
下面来看看在我的程序中是如何实现发送Ping命令的:
        private void Ping(string url)
        {
            try
            {
                Thread.Sleep(500);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                request.ContentType = "text/xml";
                request.Timeout = 3000;
                request.Credentials = CredentialCache.DefaultNetworkCredentials;

                AddXmlToRequest(request);
               
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(response.GetResponseStream());
                    ......
                }
            }
            catch (Exception e)
            {
                ......
            }
        }

        /// <summary>
        /// 构造Ping Service的 RPC-XML 请求.
        /// </summary>
        private  void AddXmlToRequest(HttpWebRequest request)
        {
            Stream stream = (Stream)request.GetRequestStream();
            using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.ASCII))
            {
                writer.WriteStartDocument();
                writer.WriteStartElement("methodCall");
                writer.WriteElementString("methodName", "weblogUpdates.extendedPing");
                writer.WriteStartElement("params");
                writer.WriteStartElement("param");
                writer.WriteElementString("value",tb_BlogName.Text.Trim());
                writer.WriteEndElement();
                writer.WriteStartElement("param");
                writer.WriteElementString("value", tb_BlogUrl.Text.Trim());
                writer.WriteEndElement();
                writer.WriteStartElement("param");
                writer.WriteElementString("value", tb_PageUrl.Text.Trim());
                writer.WriteEndElement();
                writer.WriteStartElement("param");
                writer.WriteElementString("value", tb_FeedUrl.Text.Trim());
                writer.WriteEndElement();
                writer.WriteStartElement("param");
                writer.WriteElementString("value", tb_Tags.Text.Trim());
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        }

好了,现在我有了一个可以在Windows桌面环境下运行的发送Ping命令的工具了,虽然麻烦一点,每次更新博客之后都要运行这个程序发送Ping命令,但好处是比较直观,想发就发。最终的程序界面如下所示,我在右边列出了Tiray软件博客的最新15条更新,算是帮自己宣传一下吧,呵呵!



如果你对这个程序感兴趣,可以到以下地址下载,注意我是用C#写的,如果你的电脑没装那个有10多M的讨厌的.NET Framework 2.0话...... 
下载地址:
http://www.tiray.net/page/Tiray-Blog-Ping.aspx

如果你想进一步了解XML RPC技术,可以去http://www.xml-rpc.net/看看,这是一个开源的C#项目,你甚至可以用它来实现一个Ping Service服务器。

posted on 2008-05-14 12:47  tiray  阅读(2084)  评论(3编辑  收藏  举报