天天看點

自動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,如需轉載請自行聯系原作者

繼續閱讀