Duda sobre un servicio web en xmlrpclib

Antonio Roncero roncero en gmail.com
Mar Dic 12 10:33:26 CET 2006


Bueno, en principio parece que ya funciona todo. He añadido ahora una
funcion en el servicio web que actualiza un campo en una base de datos de
mysql. Actualiza correctamente pero me da el siguiente error:

C:\python cliente.py
Traceback (most recent call last):
  File "cliente.py", line 4, in ?
    s.insertar(2,300,200)
  File "C:\Python24\lib\xmlrpclib.py", line 1096, in __call__
    return self.__send(self.__name, args)
  File "C:\Python24\lib\xmlrpclib.py", line 1383, in __request
    verbose=self.__verbose
  File "C:\Python24\lib\xmlrpclib.py", line 1147, in request
    return self._parse_response(h.getfile(), sock)
  File "C:\Python24\lib\xmlrpclib.py", line 1286, in _parse_response
    return u.close()
  File "C:\Python24\lib\xmlrpclib.py", line 744, in close
    raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 1: 'exceptions.TypeError:cannot marshal None unless
allo
w_none is enabled'>

Esto son los scripts:
Cliente:

import xmlrpclib
s = xmlrpclib.Server("http://192.168.2.2:8001")
s.insertar(2,300,200)

Servidor:

def insertar(id,valor1,valor2):
    import MySQLdb
    db = MySQLdb.connect(host="localhost",
user="root",passwd="xxxxx",db="base_datos")
    c = db.cursor()
    c.execute("UPDATE tabla SET campo1=%s , campo2=%s WHERE
id=%s",(valor1,valor2,id))
    db.close()
from SimpleXMLRPCServer import SimpleXMLRPCServer
s = SimpleXMLRPCServer(("",8001))
s.register_function(insertar)
s.serve_forever()

El caso es que se actualizan bien los valores pero me sale el error y me
gustaria saber a que se puede deber.
Gracias.




El día 3/12/06, Antonio Roncero <roncero en gmail.com> escribió:
>
> gracias... era eso. Ya funciona.
>
> El día 2/12/06, Arnau Sanchez <arnau en ehas.org> escribió:
> >
> > Antonio Roncero escribió:
> >
> > > accedo desde el ordenador 192.168.2.5 de la siguiente manera.
> > >
> > > import xmlrpclib
> > > s = xmlrpclib.Server('http://192.168.2.2:8888')
> > > print s.suma(2,3)
> >
> > Sería interesante que pegaras también el código del servidor, porque lo
> > más
> > probable es que estés haciendo "bind" sólo a la dirección local. Si
> > tienes algo así:
> >
> > server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))
> >
> > Prueba con esto:
> >
> > server = SimpleXMLRPCServer.SimpleXMLRPCServer(("", 8888))
> >
> > Si estás en *nix, puedes comprobar que efectivamente está escuchando a
> > todo el
> > mundo:
> >
> > #lsof -i :9999
> > COMMAND   PID  USER   FD   TYPE  DEVICE SIZE NODE NAME
> > ipython 22500 arnau    4u  IPv4 1194737       TCP *:8888 (LISTEN)
> >
> > ....
> >
> > Seguramente lo conozcas, pero por si acaso, aquí tienes un buen tutorial
> > sobre
> > el tema:
>
>   http://www-128.ibm.com/developerworks/webservices/library/ws-pyth10.html
> >
> > Finalmente, espero que no necesites mucha velocidad, porque el XMLRPC
> > que viene
> > de serie con Python es desesperantemente lento!! una vez que tuve que
> > usarlo en
> > serio desistí y acabé haciendo mi propio RPC (cutre, sin duda, pero más
> > rápido).
> > Además, los módulos xmlrpclib y SimpleXMLRPCServer tienen ciertas
> > incompatibilidades (que sólo aparecen si haces cosas más o menos raras,
> > tampoco
> > es preocupante).
> >
> > _______________________________________________
> > Python-es mailing list
> > Python-es en aditel.org
> > http://listas.aditel.org/listinfo/python-es
> >
>
>




Más información sobre la lista de distribución Python-es