Code Comments

Code Comments

Tips and short tutorials on various programming technologies

Code Comments RSS Feed
 
 
 
 

Publishing to a WordPress Blog via XML-RPC (Part 7)

Please refer to this post for some background.

The next class is used for actually sending and receiving XML-RPC messages over HTTP. I’ve also added some statements that write the requests and responses to Console.Out so you can see what they look like as they are going across the wire.

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;
 
namespace Piccolo.Common
{
	public class XmlRpcClient
	{
		private string _url;
 
		public XmlRpcClient(string url)
		{
			_url = url;
		}
 
		public string InvokeXmlRpcFunction(string methodName, params string[] parameters)
		{
			HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(_url);
			webRequest.Method = "POST";
			webRequest.ContentType = "text/xml";
 
			Stream requestStream = (Stream)webRequest.GetRequestStream();
			XmlTextWriter xmlWriter = new XmlTextWriter(requestStream, Encoding.UTF8);
 
			WriteXml(methodName, parameters, xmlWriter);
 
			HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
			StreamReader responseStream = new StreamReader(webResponse.GetResponseStream());
 
			string responseText = responseStream.ReadToEnd();
 
			responseStream.Close();
			webResponse.Close();
 
			Console.Out.WriteLine(responseText);
 
			return responseText;
		}
 
		private static void WriteXml(string methodName, string[] parameters, XmlTextWriter xmlWriter)
		{
			StringBuilder xmlBuilder = new StringBuilder();
			xmlBuilder.Append("<?xml version=\"1.0\"?>\n");
			xmlBuilder.Append("<methodCall>\n");
			xmlBuilder.Append("  <methodName>" + methodName + "</methodName>\n");
			xmlBuilder.Append("  <params>\n");
 
			foreach (string parameter in parameters)
				xmlBuilder.AppendFormat("    <param><value>{0}</value></param>\n", parameter);
 
			xmlBuilder.Append("  </params>\n");
			xmlBuilder.Append("</methodCall>\n\n");
 
			Console.Out.WriteLine(xmlBuilder.ToString());
 
			xmlWriter.WriteRaw(xmlBuilder.ToString());
			xmlWriter.Close();
		}
	}
}

Leave a Reply