Registrar un objeto de una clase con SOAPpy
Pedro Javier Aljaro Velasco
i02alvep en uco.es
Mie Abr 14 15:19:52 CEST 2004
Hola a todos, estoy intentando hacer otro ejemplo de servicio web con
SOAPpy, utilizo la versión 2.2 de python y la versión 0.11.3 de SOAPpy.
En este ejemplo lo que intento hacer es registrar un objeto de una clase
en un objeto serversoap en vez de registrar una funcion, pero cuando en
la parte del cliente intento llamar al objeto o utilizar algun metodo de
la clase representada por el objeto me da fallo. Aquí a continuación os
pongo los dos archivos servidor y cliente:
Servidor.py
from SOAPpy import SOAPServer
class Temperatura:
def __init__(self, temp=0):
self.temp=temp
def __str__ (self):
return "La temperatura es de " + str(self.temp) + " grados C"
def setTemp (self, newTemp):
self.temp=newTemp
def imprimir (self):
print "La temperatura es de " + str(self.temp) + " grados C"
server=SOAPServer(('i02alvep.2mydns.net', 8008))
tem=Temperatura()
server.registerObject(tem)
server.serve_forever()
Cliente.py
>From SOAPpy import SOAPProxy
s=SOAPProxy(http://i02alvep.2mydns.net:8008
<http://i02alvep.2mydns.net:8008/> )
s.tem.setTemp(22)
print s.tem
Cuando ejecuto este script cliente me da el siguiente fallo:
<Fault SOAP-ENV:Client: No method tem.setTemp found:
exceptions.AttributeError T
emperatura instance has no attribute 'tem'>
Traceback (most recent call last):
File "cliente.py", line 5, in ?
s.tem.setTemp(22)
File "C:\PROGRAMAS
PROYECTO\Python22\lib\site-packages\SOAPpy\Client.py", line
421, in __call__
return self.__r_call(*args, **kw)
File "C:\PROGRAMAS
PROYECTO\Python22\lib\site-packages\SOAPpy\Client.py", line
443, in __r_call
self.__hd, self.__ma)
File "C:\PROGRAMAS
PROYECTO\Python22\lib\site-packages\SOAPpy\Client.py", line
357, in __call
raise p
SOAPpy.Types.faultType: <Fault SOAP-ENV:Client: No method tem.setTemp
found: exc
eptions.AttributeError Temperatura instance has no attribute
'tem'>ons.SAXReaderNotAvailable: No parsers found
El problema reside en como llamar desde el lado servidor a los metodos
de la clase Temperatura representada por el objeto tem
Yo lo intento poniendo s.tem.setTemp(22) por ejemplo pero me da fallo, o
¿Cómo se puede mostrar el valor del objeto tem que por defecto vale 0?
Espero vuestra ayuda y gracias de antemano.
Saludos a todos.
Pedro Javier Aljaro Velasco
Más información sobre la lista de distribución Python-es