(译)在 ASP.NET中使用 XML-RPC 进行ping

译自:http://blog.madskristensen.dk/post/Ping-using-XML-RPC-in-ASPNET.aspx

备注:XML-RPC的全称是XML Remote Procedure Call,即XML(标准通用标记语言下的一个子集)远程方法调用。它是一套允许运行在不同操作系统、不同环境的程序实现基于Internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式。Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构。

许多博客都能在有新内容创建或者内容有更新时,向各种Ping服务发送Ping请求,例如 Ping-o-Matic, Feedburner 和Technorati。但是ping这些服务并不只是博客独享的好处。几乎所有的网站都可以用这个技术来定期更新网站的内容。

所有的这些服务都使用XML-RPC并且使用其相同的规范和格式,所以你可以写一个ping类并且用来添加任意的Ping服务的URL地址。我已经写了一个可以在任意 ASP.NET 应用程序中使用的简单静态ping类

代码(使用XML-RPC发送 ping 所需要的三个方法):

        /// <summary>
        /// 发送一个PING到各类PING服务中
        /// </summary>
        public static void Send()
        {
            //这个地址是百度的PING服务地址:http://ping.baidu.com/ping/RPC2
            Execute("http://ping.baidu.com/ping/RPC2");
            //这个谷歌的PING服务地址:http://blogsearch.google.com/ping/RPC2
            Execute("http://blogsearch.google.com/ping/RPC2");
        }
      
        /// <summary>        
        /// 创建一个WEB请求并使用流传入XML-RPC
        /// </summary>
        /// <param name="url">ping服务的地址</param>
        private static void Execute(string url)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                request.ContentType = "text/xml";
                request.Timeout = 3000;
                AddXmlToRequest(request);
                request.GetResponse();
            }
            catch (Exception)
            {
                // 添加错误日志.
            }
        }

        /// <summary>
        /// 添加XML内容到WEB请求中。 XML格式必须为标准格式
        /// XML通过XML-RPC发送请求
        /// </summary>
        /// <param name="request"></param>
        private static 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.ping");
                writer.WriteStartElement("params");
                writer.WriteStartElement("param");

                /*这里传入的是你网站的名字*/
                writer.WriteElementString("value", "十有三");
                writer.WriteEndElement();
                writer.WriteStartElement("param");

                /*这里的URL地址传入的是你的网站主域名地址(不要传入更新的页面!)*/
                writer.WriteElementString("value", "https://shiyousan.com");

                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        }

下载上面这个类(这里指上面的三个方法)并把它放到 App_Code 文件夹里或一个类库里。然后在你 ASP.NET 程序中的任何位置你都像下面代码那样通过调用Send方法来使用这个ping类:

PingService.Send();

由于在ping各种各样的服务时可能要花费一些时间,因此你也许可以考虑下使用异步调用。就这样,现在你有一个使用 XML-RPC 来ping各种服务的类了。




原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/98321.html

(0)
上一篇 2021年8月21日 00:11
下一篇 2021年8月21日 00:11

相关推荐

发表回复

登录后才能评论