Servicios web
Ernesto Revilla
erny en sicem.biz
Mie Jun 8 19:57:17 CEST 2005
para ver lo que devuelve el servidor, simplemente haz:
cita = server.getCita('2213')
print cita
No hace falta definir/declarar la estructura en el cliente. Puedes
probar el tipo de cita con:
type(cita)
Si es de tipo de cadena, tu servidor no te manda el mensaje correcto.
Si quieres ver lo que te manda (xml) puedes hacer:
from SOAPpy import Config
Config.debug = 1
y después hacer la llamada y te indica todos los mensajes intercambiados.
Erny
azabel escribió:
>gracias por responder tan rápido,
>
>este es el cliente:
>
>#!/usr/bin/python
>import SOAPpy
>from SOAPpy import SOAPProxy
>
>server = SOAPProxy("http://localhost/PFC/GestorWebCitas.php")
>
>id_cita=0
>fecha=""
>hora=""
>descripcion=""
>
>cita = SOAPpy.structType()
>
>cita._addItem('id_cita',id_cita)
>cita._addItem('fecha', fecha)
>cita._addItem('hora', hora)
>cita._addItem('descripcion', descripcion)
>
>cita = server.getCita('2213')
>
>
>
Esto qué es???? se supone que esta última instrucción es algo que
¿No será que quieres leer sim
>c = cita._asdict() <- No lo reconoce
>print c['hora']
>
>mientras que la estructura del servidor esta definida con nusoap asi:
>
>$server->wsdl->addComplexType(
> 'Cita',
> 'complexType',
> 'struct',
> 'all',
> '',
> array(
> 'id_cita' => array('name' => 'id_cita', 'type' => 'xsd:int'),
> 'fecha' => array('name' => 'fecha', 'type' => 'xsd:string'),
> 'hora' => array('name' => 'hora', 'type' => 'xsd:string'),
> 'descripcion' => array('name' => 'descripcion', 'type' => 'xsd:string')
> )
>);
>
>y el wsdl que se genera es:
>
><definitions targetNamespace="urn:GestorWebCitas">
>-
> <types>
>-
> <xsd:schema targetNamespace="urn:GestorWebCitas">
><xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
><xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
>-
> <xsd:complexType name="Cita">
>-
> <xsd:all>
><xsd:element name="id_cita" type="xsd:int"/>
><xsd:element name="fecha" type="xsd:string"/>
><xsd:element name="hora" type="xsd:string"/>
><xsd:element name="descripcion" type="xsd:string"/>
></xsd:all>
></xsd:complexType>
></xsd:schema>
></types>
>-
> <message name="getCitaRequest">
><part name="fecha" type="xsd:string"/>
></message>
>-
> <message name="getCitaResponse">
><part name="return" type="tns:Cita"/>
></message>
>-
> <portType name="GestoresWebCitasPortType">
>-
> <operation name="getCita">
><documentation>Devuelve una cita en una determinada
>fecha</documentation>
><input message="tns:getCitaRequest"/>
><output message="tns:getCitaResponse"/>
></operation>
></portType>
>-
> <binding name="GestoresWebCitasBinding"
>type="tns:GestoresWebCitasPortType">
><soap:binding style="rpc"
>transport="http://schemas.xmlsoap.org/soap/http"/>
>-
> <operation name="getCita">
><soap:operation soapAction="urn:GestoresWebCitas#getCita" style="rpc"/>
>-
> <input>
><soap:body use="encoded" namespace="urn:GestoresWebCitas"
>encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
></input>
>-
> <output>
><soap:body use="encoded" namespace="urn:GestoresWebCitas"
>encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
></output>
></operation>
></binding>
>-
> <service name="GestoresWebCitas">
>-
> <port name="GestoresWebCitasPort"
>binding="tns:GestoresWebCitasBinding">
><soap:address location="http://localhost/PFC/GestorWebCitas.php"/>
></port>
></service>
></definitions>
>
>
>El mié, 08-06-2005 a las 18:48 +0200, Antonio Beamud Montero escribió:
>
>
>>El mié, 08-06-2005 a las 18:37 +0200, azabel escribió:
>>
>>
>>>gracias por la respuesta, pero no me reconce la función:
>>>
>>> c = cita._asdict()
>>>AttributeError: 'str' object has no attribute '_asdict'
>>>
>>>
>>>
>>>
>>server que es? si server.getCita() devuelve un objeto de tipo estructura
>>esto te tiene que funcionar. Que XML devuelve en el mensaje SOAP?
>>
>>
>>
>>>>>t = SOAPpy.structType()
>>>>>t._addItem('valor', 3)
>>>>>t['valor']
>>>>>
>>>>>
>>3
>>
>>
>>>El mié, 08-06-2005 a las 16:11 +0200, Antonio Beamud Montero escribió:
>>>
>>>
>>>>El mié, 08-06-2005 a las 13:53 +0200, azabel escribió:
>>>>
>>>>
>>>>>Hola, primero saluda a todos porque es mi primer mensaje en la lista.
>>>>>
>>>>>Estoy realizando un proyecto cliente-servidor. El servidor programado en
>>>>>php proveera de servicios web (lo estoy desarrollando con el toolkit
>>>>>nusoap). Por otro lado la parte cliente la estoy desarrollando en python
>>>>>con SOAPpy.
>>>>>
>>>>>El problema es que necesito enviar una estructura de datos desde el
>>>>>servido al cliente, y no consigo que el cliente recoja esa estructura.
>>>>>Tengo algo asi:
>>>>>
>>>>>cita = SOAPpy.structType()
>>>>>cita._addItem('id_cita',id_cita)
>>>>>
>>>>>cita._addItem('fecha', fecha)
>>>>>cita._addItem('hora', hora)
>>>>>cita._addItem('descripcion', descripcion)
>>>>>
>>>>>cita = server.getCita('2213')
>>>>>
>>>>>
>>>>c = cita._asdict()
>>>>print c['hora']
>>>>
>>>>
>>>>
>>>>>y no tengo ni idea de como acceder a uno de los campos, por ejemplo la
>>>>>hora.
>>>>>
>>>>>
>>>>>salu2 y gracias
>>>>>
>>>>>
>>>>>
>>>>>
---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0523-4, 08/06/2005
Comprobado en: 08/06/2005 19:57:19
avast! tiene los derechos reservados (c) 2000-2004 ALWIL Software.
http://www.avast.com
Más información sobre la lista de distribución Python-es