Duda con SoapPy.

Chema Cortes pych3m4 en gmail.com
Vie Ene 13 02:38:06 CET 2006


El 12/01/06, Joan Carles Jimenez<jjcarles en terra.es> escribió:
> Hola a todos.
>
>         Tengo un servicio web hecho en mono que simplemente suma dos números y
> devuelve el resultado. La llamada la realizo de la siguiente manera ...
>
>     def OnClickSuma(self, event):
>         try:
>             wsdl = "http://www2.jocajica.com/anaconda/Anaconda.wsdl"
>             proxy = SOAPpy.WSDL.Proxy(wsdl)
>
>             try:
>                 a = int(self.text_ctrl_1.GetValue())
>                 b = int(self.text_ctrl_2.GetValue())
>
>                 c = proxy.Suma(a, b)
>
>                 self.text_ctrl_3.SetValue(c)
>             except:
>                 print sys.exc_info()[0]
>                 raise
>
>         except:
>             print sys.exc_info()[0]
>             raise
>
>         event.Skip()
>
> ... pero siempre obtengo un 0 como resultado.

En principio no parece que esté mal la llamada al servicio web.

> Observando el fichero WSDL he
> visto que mono no genera un tipo simple para devolver el resultado sino que
> devuelve un tipo complejo:
>
>   <types>
>     <xs:schema elementFormDefault="qualified"
> targetNamespace="http://localhost/anaconda"
> xmlns:xs="http://www.w3.org/2001/XMLSchema">
>       <xs:element name="Suma">
>         <xs:complexType>
>           <xs:sequence>
>             <xs:element minOccurs="1" maxOccurs="1" name="a" type="xs:int" />
>             <xs:element minOccurs="1" maxOccurs="1" name="b" type="xs:int" />
>           </xs:sequence>
>         </xs:complexType>
>       </xs:element>
>       <xs:element name="SumaResponse">
>         <xs:complexType>
>           <xs:sequence>
>             <xs:element minOccurs="1" maxOccurs="1" name="SumaResult"
> type="xs:int" />
>           </xs:sequence>
>         </xs:complexType>
>       </xs:element>
>       <xs:element name="int" type="xs:int" />
>     </xs:schema>
>   </types>
>
> ¿Alguna idea de como tratar este tipo con SoapPy? Gracias por adelantado.

No tengo mucha experiencia en "depurar" servicios web, pero en python
siempre se puede emplear la "Fuerza de la Introspección" (¡Recuérdalo
siempre, Luke! :-):

http://diveintopython.org/soap_web_services/introspection.html




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