译自: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类
/// <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各种服务的类了。
作者:十有三
出处:https://shiyousan.com/post/635399409047938900
版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。