几个月前写了一个博客自动ping程序,其实也没有什么技术含量,只是不想很快被遗忘,在此一记,希望各路好友,批评批正。
ping程序的,用处是把发布文章主动的提交搜索引擎,以便达到让搜索引擎快速收录。
程序原理主要通过RPC协议来实现的,下面简单学习一下RPC协议。
RPC协议
英文原义:Remote Procedure Call Protocol
中文释义:(RFC-1831)远程调用协议
注解:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。
程序主界面载图
废话少说了,看代码。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.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> " );
return sb.ToString();
}
}
}
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.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> " );
return sb.ToString();
}
}
}
整个源码包下载点击此处!转载请保留原文地址
http://www.cnblogs.com/cgli/archive/2011/04/01/2001958.html
分类:
ASP.NET
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2013/03/18/2965954.html
,如需转载请自行联系原作者