(Anterior) Diseño con XMLRPC

XMLRPC en Python (Servidor)

El siguiente programa (Servidor) esta diseñado para atender solicitudes de "Estado del Tiempo" vía XMLRPC bajo el puerto TCP 12000 de la máquina local (localhost); después se observará como este mismo Servidor puede atender solicitudes de otros Clientes que no están escritos en Python.

En base a su ambiente puede generar el siguiente Servidor XMLRPC 

     Asegúrese que ningún otro Servidor este corriendo bajo el mismo puerto

Código Fuente ServicioClima Servidor Python en XMLRPC

#!/usr/bin/python
import SocketServer, BaseHTTPServer
import xmlrpclib
import sys
import string

def elclima(argumentos):
  pais = string.lower(argumentos[0])

  if pais == 'china':	
      respuesta = "china : Humedo"
  elif pais == 'australia':
      respuesta = "australia : Nublado"
  elif pais == 'israel':
      respuesta = "israel : Terrorismo..."
  else:
      respuesta = pais + " no esta disponible , por favor 
                      elija entre [china|australia|israel]"
  return respuesta

class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):

  def do_POST(self):
     try:
      # extraer argumentos
      data = self.rfile.read(int(self.headers["content-length"]))
      params, method = xmlrpclib.loads(data)

      # generar respuesta
      try:
        response = self.call(method, params)
        if type(response) != type(()):
           response = (response,)
        except:
         # reportar errores
	response = xmlrpclib.dumps(xmlrpclib.Fault(1, "%s:%s" % 
                   (sys.exc_type, sys.exc_value))
		   )
        else:
          response = xmlrpclib.dumps(
		    response,
		    methodresponse=1
		    )
      except:
       # error interno, reportar como error HTTP 
       self.send_response(500)
       self.end_headers()
      else:
       # respuesta valida de HTTP 
       self.send_response(200)
       self.send_header("Content-type", "text/xml")
       self.send_header("Content-length", str(len(response)))
       self.end_headers()
       self.wfile.write(response)

       # cerrar conexion
       self.wfile.flush()
       self.connection.shutdown(1)

    def call(self, method, params):
	if method == "clima.mundial":
	   return elclima(params)
	else: 
	   raise xmlrpclib.Fault(777, "Método no definido en XMLRPC")


if __name__ == '__main__':

    print "Inicializando el Servidor XML-RPC en el puerto 12000...";
    print "Aceptando solicitudes (Ctrl-C para terminar el 
         Servidor...realize otra llamada del Cliente para finalizar)"
    server = SocketServer.TCPServer(('', 12000), RequestHandler)
    server.serve_forever()

Menú Curso

XML y sus Orígenes

Manipulación y Proceso de XML

DOM, SAX y JDOM

Namespaces, Schemas y DTD's

XSL: XSLT, XPath y TraX

XMLRPC y SOAP (Web Services)

Diseño con XMLRPC

Diseño con SOAP .

Apéndice "A" (Procesando XML con parsers).

Apéndice "B" (Validando XML con Schemas y DTD's).

Apéndice "C" (XSL: XPath y "XSL Stylesheets").

Apéndice "D" (XMLRPC: Diseño).

Apéndice "E" (SOAP, WSDL, UDDI y WSIL : Diseño).