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