Registrar un objeto de una clase con SOAPpy

Ernesto Revilla erny en sicem.biz
Mie Abr 14 20:48:41 CEST 2004


Hola,

has probado con s.setTemp(22) ?

creo acordarme, que el objeto no se menciona en la llamada, es 
implícito. Si se registran tanto objetos como funciones, creo que las 
funciones tienen preferencias.

Para devolver el valor al cliente, lo tendrás que hacer con return, es 
decir:
def getTemp(self):
    return self.temp
en el cliente puedes hacer lo que quieras con el valor (imprimir o lo 
que sea).

En todo caso, de nuevo te hago referencia al documento y las 
transparencias que escribí sobre esto para HispaLinix 2003 que lo 
encontrarás en http://www.sicem.biz/personas/erny/python

Saludos, Erny


Pedro Javier Aljaro Velasco escribió:

>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
> 
>_______________________________________________
>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