自动ping博客服务程序
生活随笔
收集整理的這篇文章主要介紹了
自动ping博客服务程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
幾個月前寫了一個博客自動ping程序,其實也沒有什么技術含量,只是不想很快被遺忘,在此一記,希望各路好友,批評批正。
ping程序的,用處是把發布文章主動的提交搜索引擎,以便達到讓搜索引擎快速收錄。
程序原理主要通過RPC協議來實現的,下面簡單學習一下RPC協議。
RPC協議
英文原義:Remote Procedure Call Protocol
中文釋義:(RFC-1831)遠程調用協議
注解:一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。
RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息的到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用過程接收答復信息,獲得進程結果,然后調用執行繼續進行。
程序主界面載圖
廢話少說了,看代碼。ping程序內部核心代碼都在這里了。
usingSystem;usingSystem.Text;usingSystem.Net;usingSystem.IO;usingSystem.Xml;namespacePingService{publicclassPingBlog
????{privatestringblogName?=string.Empty;privatestringblogUrl?=string.Empty;privatestringrssUrl?=string.Empty;privatestringupdateUrl?=string.Empty;privatestringmetaString?=string.Empty;publicPingBlog(stringname,?stringurl,?stringfredUrl,?stringupdateUrl,?stringtag)
????????{
????????????blogName?=name;
????????????blogUrl?=url;
????????????rssUrl?=fredUrl;this.updateUrl?=updateUrl;
????????????metaString?=tag;
????????}//傳參數傳遞需要ping目標?URLpublicstringStartPing(stringpingURL)
????????{
????????????StreamReader?sr?=null;
????????????StringBuilder?sb?=newStringBuilder();stringstrOutput?=string.Empty;stringstrXML?=string.Empty;try
????????????{
????????????????strXML?=BuildRCXML();intlen?=strXML.Length;
????????????????ASCIIEncoding?ascii?=newASCIIEncoding();
????????????????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?=newStreamReader(webRes.GetResponseStream(),?Encoding.ASCII);stringret?=sr.ReadToEnd();
????????????????sb.AppendLine("\n");
????????????????sb.AppendLine(ret);if(ret.IndexOf("<boolean>0</boolean>")>=0)
????????????????{
????????????????????sb.AppendLine("\n\t?Ping服務提交成功!");
????????????????}elseif(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();
????????????????}
????????????}returnstrOutput;
????????}//根據RPC協議API文檔構造XMLprivatestringBuildRCXML()
????????{
????????????System.Text.StringBuilder?sb?=newSystem.Text.StringBuilder();
????????????sb.Append("<?xml?version=\"1.0\"?>");
????????????sb.Append("<methodCall>");
????????????sb.Append("<methodName>weblogUpdates.extendedPing</methodName>");//weblogUpdates.pingsb.Append("<params>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?blogName);
????????????sb.Append("</param>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?blogUrl);
????????????sb.Append("</param>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?updateUrl);
????????????sb.Append("</param>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?rssUrl);
????????????sb.Append("</param>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?metaString);
????????????sb.Append("</param>");
????????????sb.Append("</params>");
????????????sb.Append("</methodCall>");returnsb.ToString();
????????????}
????}
} usingSystem;usingSystem.Text;usingSystem.Net;usingSystem.IO;usingSystem.Xml;namespacePingService
{publicclassPingBlog
????{privatestringblogName?=string.Empty;privatestringblogUrl?=string.Empty;privatestringrssUrl?=string.Empty;privatestringupdateUrl?=string.Empty;privatestringmetaString?=string.Empty;publicPingBlog(stringname,?stringurl,?stringfredUrl,?stringupdateUrl,?stringtag)
????????{
????????????blogName?=name;
????????????blogUrl?=url;
????????????rssUrl?=fredUrl;this.updateUrl?=updateUrl;
????????????metaString?=tag;
????????}//傳參數傳遞需要ping目標?URLpublicstringStartPing(stringpingURL)
????????{
????????????StreamReader?sr?=null;
????????????StringBuilder?sb?=newStringBuilder();stringstrOutput?=string.Empty;stringstrXML?=string.Empty;try
????????????{
????????????????strXML?=BuildRCXML();intlen?=strXML.Length;
????????????????ASCIIEncoding?ascii?=newASCIIEncoding();
????????????????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?=newStreamReader(webRes.GetResponseStream(),?Encoding.ASCII);stringret?=sr.ReadToEnd();
????????????????sb.AppendLine("\n");
????????????????sb.AppendLine(ret);if(ret.IndexOf("<boolean>0</boolean>")>=0)
????????????????{
????????????????????sb.AppendLine("\n\t?Ping服務提交成功!");
????????????????}elseif(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();
????????????????}
????????????}returnstrOutput;
????????}//根據RPC協議API文檔構造XMLprivatestringBuildRCXML()
????????{
????????????System.Text.StringBuilder?sb?=newSystem.Text.StringBuilder();
????????????sb.Append("<?xml?version=\"1.0\"?>");
????????????sb.Append("<methodCall>");
????????????sb.Append("<methodName>weblogUpdates.extendedPing</methodName>");//weblogUpdates.pingsb.Append("<params>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?blogName);
????????????sb.Append("</param>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?blogUrl);
????????????sb.Append("</param>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?updateUrl);
????????????sb.Append("</param>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?rssUrl);
????????????sb.Append("</param>");
????????????sb.Append("<param>");
????????????sb.AppendFormat("<value>{0}</value>",?metaString);
????????????sb.Append("</param>");
????????????sb.Append("</params>");
????????????sb.Append("</methodCall>");returnsb.ToString();
????????????}
????}
} 整個源碼包下載點擊此處!轉載請保留原文地址 http://www.divmy.com/ http://www.cnblogs.com/cgli/archive/2011/04/01/2001958.html
總結
以上是生活随笔為你收集整理的自动ping博客服务程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金手续费怎么计算
- 下一篇: C# HttpWebRequest提交数