XML-RPC es un protocolo desarrollado por Microsoft en conjunto con un ingeniero (no recuerdo el nombre) de la empresa UserLand Software a fines de los 90, ocupa XML como medio de codificación de datos y el protocolo http para la transmisión de mensajes, si bien es un protocolo simple y muy básico en cuanto a funcionalidades es la base de lo conocemos actualmente como SOAP. La invocación de estos servicios no es una tarea compleja pero debido a la escasa literatura que existe respecto a este tema he decidido dar un ejemplo de su implementación esperando que a más de a uno lo ayude.
Para llevar a cabo la invocación se necesita lo siguiente:
1) la Dirección Web en donde está alojado el servicio a llamar (url).
2) El XML con los parámetros de entrada y las especificaciones del método(xmlparam).
El XML tiene la siguiente estructura
<?xml version="1.0"?>
<methodCall>
<methodName>Nombre metodo</methodName>
<params>
<param>
<value><i4>valor</i4></value>
</param>
</params>
</methodCall>
Sabiendo esto la llamada la hacemos de la siguiente forma:
public string LLamadaXMLRPC(string url, string xmlparam)
{
WebRequest webRequest = WebRequest.Create(url);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(xmlparam);
Stream os = null;
try
{ // send the Post
webRequest.ContentLength = bytes.Length; //Count bytes to send
os = webRequest.GetRequestStream();
os.Write(bytes, 0, bytes.Length); //Send it
}
catch (WebException ex)
{
//
}
finally
{
if (os != null)
{
os.Close();
}
}
try
{ // get the response
WebResponse webResponse = webRequest.GetResponse();
if (webResponse == null)
{ return null; }
StreamReader sr = new StreamReader(webResponse.GetResponseStream());
return sr.ReadToEnd().Trim();
}
catch (WebException ex)
{
//
}
return null;
}
Al ver el código se darán cuenta que la llamada es a través de un POST y tiene como propiedad "application/x-www-form-urlencoded", esto tiene como función codificar todos los caracteres antes de que sean enviados.