天天看点

自动ping博客服务程序

几个月前写了一个博客自动ping程序,其实也没有什么技术含量,只是不想很快被遗忘,在此一记,希望各路好友,批评批正。

ping程序的,用处是把发布文章主动的提交搜索引擎,以便达到让搜索引擎快速收录。

程序原理主要通过RPC协议来实现的,下面简单学习一下RPC协议。

RPC协议

  英文原义:Remote Procedure Call Protocol

  中文释义:(RFC-1831)远程调用协议

  注解:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

  RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

  RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。

程序主界面载图

自动ping博客服务程序

废话少说了,看代码。ping程序内部核心代码都在这里了。

自动ping博客服务程序
自动ping博客服务程序

using System;

using System.Text;

using System.Net;

using System.IO;

using System.Xml;

namespace PingService

{

    public class PingBlog

    {

        private string blogName = string.Empty;

        private string blogUrl = string.Empty;

        private string rssUrl = string.Empty;

        private string updateUrl = string.Empty;

        private string metaString = string.Empty;

        public PingBlog(string name, string url, string fredUrl, string updateUrl, string tag)

        {

            blogName = name;

            blogUrl = url;

            rssUrl = fredUrl;

            this.updateUrl = updateUrl;

            metaString = tag;

        }

//传参数传递需要ping目标 URL

        public string StartPing(string pingURL)

            StreamReader sr = null;

            StringBuilder sb = new StringBuilder();

            string strOutput = string.Empty;

            string strXML = string.Empty;

            try

            {

                strXML = BuildRCXML();

                int len = strXML.Length;

                ASCIIEncoding ascii = new ASCIIEncoding();

                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(pingURL);

                webReq.Method = "POST";

                webReq.Timeout = 3000;//超时为3秒

           webReq.ContentType = "text/xml";

                webReq.Credentials = CredentialCache.DefaultNetworkCredentials;

                webReq.ContentLength = len;

                Stream streamRequest = webReq.GetRequestStream();

                byte[] bt = ascii.GetBytes(strXML);

                streamRequest.Write(bt, 0, len);

                HttpWebResponse webRes = (HttpWebResponse)webReq.GetResponse();

                sr = new StreamReader(webRes.GetResponseStream(), Encoding.ASCII);

                string ret = sr.ReadToEnd();

                sb.AppendLine("\n");

                sb.AppendLine(ret);

                if (ret.IndexOf("<boolean>0</boolean>")>=0)

                {

                    sb.AppendLine("\n\t Ping服务提交成功!");

                }

                else if (ret.IndexOf("<boolean>1</boolean>") >= 0)

                    sb.AppendLine("\n\t Ping服务提交失败!");

              if (sr != null)

                    sr.Close();

                   sr=null;

            }

            catch (Exception ex)

                sb.AppendLine(ex.Message);

                sb.AppendLine(ex.StackTrace);

            finally

                strOutput = sb.ToString();

                if(sr!=null)

                    sr.Dispose();

            return strOutput;

//根据RPC协议API文档构造XML

      private string BuildRCXML()

            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            sb.Append("<?xml version=\"1.0\"?>");

            sb.Append("<methodCall>");

            sb.Append("<methodName>weblogUpdates.extendedPing</methodName>");//weblogUpdates.ping

            sb.Append("<params>");

            sb.Append("<param>");

            sb.AppendFormat("<value>{0}</value>", blogName);

            sb.Append("</param>");

            sb.AppendFormat("<value>{0}</value>", blogUrl);

            sb.AppendFormat("<value>{0}</value>", updateUrl);

            sb.AppendFormat("<value>{0}</value>", rssUrl);

            sb.AppendFormat("<value>{0}</value>", metaString);

            sb.Append("</params>");

            sb.Append("</methodCall>");

            return sb.ToString();

    }

}

自动ping博客服务程序

整个源码包下载点击此处!转载请保留原文地址

http://www.cnblogs.com/cgli/archive/2011/04/01/2001958.html

本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2013/03/18/2965954.html,如需转载请自行联系原作者

继续阅读