WebService Python - Mono

Introducción

XML-RPC y SOAP son protocolos para la trasmisión de mensajes que pueden ser utilizados para consumir servicios Web.

Mientras que XML-RPC nació con funcionalidades básicas lo que permite una curva de aprendizaje poco pronunciada, SOAP añade características más avanzadas pudiendo realizar tareas más complejas, por lo que la elección de uno u otro protocolo depende en gran medida de las necesidades arquitectónicas que quieran resolver.

En este tutorial se mostrara como desarrollar servicios web en Python y consumirlos a través de un cliente en C#

XML-RPC vs SOAP

SOAP es hijo de XML-RPC pero no son compatibles. He aquí algunas de sus diferencias:
En XML-RPC es importante el orden de los parámetros y estos tienen nombre, no siendo así en SOAP
XML-RPC no soporta estructuras y arreglos, mientras que SOAP si.
SOAP es mucho más complicado que XML-RPC
SOAP permite seleccionar el conjunto de caracteres a utilizar(US-ASCII, UTF-8, UTF-16) XML-RPC no
SOAP permite utilizar tipos de datos definidos por el usuario, XML-RPC no

Utilizando XML-RPC

El primer paso es crear el servicio web en Python. Este servicio simple crea un método para multiplicar dos números y escucha las peticiones por el puerto 8082.
#Inicio código Python
def multiplica(x,y):
return x*ydef Servidor():
from SimpleXMLRPCServer import SimpleXMLRPCServer
s=SimpleXMLRPCServer(("localhost",8082))
s.register_funtion(multiplica)
s.serve_forever()

if __name__ == '__main__':
print "Iniciando servicio XML-RPC"
Servidor()
#Fin código Python

Para desarrollar el cliente en C# es necesario utilizar la libería XML-RPC .Net de Charles Cook y en el proyecto (ya sea en Monodevelop o Visual Studio) hay que incluir la referencia CookComputing.XmlRpcV2.dll (la versión 1 es para .Net 1.0)
namespace pdcPythonWS
{
class MainClass
{
public static void Main(string[] args)
{
//conexion a traves de XML-RPC
ConectoXMLRPC proxy = XmlRpcProxyGen.Create();
int res =proxy.Mult(30, 20);
Console.WriteLine(res.ToString());
Console.ReadLine();
}
}

[XmlRpcUrl("http://localhost:8082/multiplica")]
public interface ConectoXMLRPC:IXmlRpcProxy
{
[XmlRpcMethod("multiplica")]
int Mult(int x, int y);
}
}

Utilizando SOAP

Para utilizar SOAP en python se puede utilizar este código como ejemplo, nuevamente se define un método para realizar la suma de dos valores.
//Servidor básico SOAP en python
import SOAPpy
def suma(x,y):
return x+y
server = SOAP.SOAPServer(("localhost", 8082))
server.registerFunction(suma)
server.serve_forever()
//Fin Servidor básico SOAP en Python

En el código en C# es necesario conocer la estructura XML que genera el método en python, y si no se domina el protocolo SOAP se puede obtener ejecutando el siguiente script de python
//script para conocer el XML del método
>>> from SOAPpy import SOAPProxy
>>> server = SOAPProxy('http://localhost:8082/modulo')
>>> server.config.dumpSOAPOut = 1 //imprime el XML que necesitas <--- >>> server.config.dumpSOAPIn = 1 //el XML con el resultado
>>> Suma = server.Metodo('27502')//ejecuto el metodo

Que se utilizará en el archivo Datos.XML en el siguiente código
namespace pdcPythonWS
{
class MainClass
{
public static void Main(string[] args)
{
ConexionSOAP conn=new ConexionSOAP();
//Conexion a traves de SOAP
conn.Conecto();
}
}

public class ConexionSOAP
{
public void ConectoVer2()
{
try
{
WebRequest request = WebRequest.Create("http://localhost:8082/");
request.Method = "POST";
request.Headers.Add("SOAPAction", "\"\"");
request.ContentType = "text/xml";

Stream stm = request.GetRequestStream();

string Archivo = "C:\\Documents and Settings\\Administrador\\Mis documentos\\SharpDevelop Projects\\pdcPythonWS\\Datos.xml";
//En este archivo se define la estructura XML del método SOAP

XmlDocument doc = new XmlDocument();
doc.Load(Archivo);
doc.Save(stm);
stm.Close();

WebResponse respuesta = request.GetResponse();
stm = respuesta.GetResponseStream();

StreamReader sr = new StreamReader(stm);
Console.WriteLine("Resultado2:" + sr.ReadToEnd());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
}

Comentarios

Entradas más populares de este blog

Project Management en la gestión del cambio

Primera Aplicación Sencilla con Django

El liderazgo en nuestro tiempo actual