[pyar] Web service de tipo WCF

Mariano Reingart reingart en gmail.com
Mar Ago 20 01:18:12 ART 2013


Hola Mauricio:

Justamente estoy trabajando en PySimpleSoap para mejorar el sobre el
soporte de espacios de nombre para webservices .Net complejos.
Además, hubo varias personas que enviaron varios parches al proyecto.
Podes probar la última versión, mi rama experimental "wsdl_namespaces":

hg clone https://code.google.com/p/pysimplesoap/
cd pysimplesoap
hg update wsdl_namespaces

Luego, podes controlar los espacios de nombre y prefijos con los
parámetros ns y soap_ns del constructor de SoapClient.
Incluso se podría usar el prefijo SOAP-ENV en mayúsculas como en tu
ejemplo, pero es una cuestión menor ya que es equivalente (fijate que
también lo llama ns1 en tu ejemplo, para la misma URI).

Te adjunto el ejemplo de código, con los datos que enviaste, el
webservice no solo acepta el requerimiento y no da error, sino hasta
responde con un token:

Requerimiento:

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:ns0="http://Ecodex.WS.Model/2011/CFDI"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
    <ns0:SolicitudObtenerToken>
    <ns0:RFC>AAA010101AAA</ns0:RFC><ns0:TransaccionID>1234</ns0:TransaccionID></ns0:SolicitudObtenerToken>
</soapenv:Body>
</soapenv:Envelope>

Respuesta:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><RespuestaObtenerToken
xmlns="http://Ecodex.WS.Model/2011/CFDI"><Token>387fbac490d31d6f51d3049b7bbd84c44b3bbb0b</Token><TransaccionID>1234</TransaccionID></RespuestaObtenerToken></s:Body></s:Envelope>

En cuanto tenga tiempo voy a ver de ponerlo como un test, para que ya
quede en el proximo lanzamiento de la biblioteca.

Cualquier cosa avisame,

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com


2013/8/18 Mauricio Baeza <mauricio02 en correolibre.org>:
> Hola Mariano...
>
> Recuerdo en algún momento haber probado pysimplesoap sin éxito... SUDS es
> muy bueno pero es algo grande a mi me gustan las cosas simples, estoy
> todavía en la intención de usar pysimplesoap para Factura Libre...
>
> De acuerdo a tu ejemplo, pysimplesoap genera:
>
> <?xml version="1.0" encoding="UTF-8"?><soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soap:Header/>
> <soap:Body>
>     <SolicitudObtenerToken xmlns="http://Ecodex.WS.Model/2011/CFDI/Imports">
>
> <RFC>AAA010101AAA</RFC><TransaccionID>1234</TransaccionID></SolicitudObtenerToken>
> </soap:Body>
> </soap:Envelope>
>
> pero la forma que espera el web service del proveedor es:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <SOAP-ENV:Envelope xmlns:ns0="http://Ecodex.WS.Model/2011/CFDI"
> xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
>    <SOAP-ENV:Header/>
>    <ns1:Body>
>       <ns0:SolicitudObtenerToken>
>          <ns0:RFC>AAA010101AAA</ns0:RFC>
>          <ns0:TransaccionID>1234</ns0:TransaccionID>
>       </ns0:SolicitudObtenerToken>
>    </ns1:Body>
> </SOAP-ENV:Envelope>
>
> hice varias pruebas con los parámetros del método:
> https://code.google.com/p/pysimplesoap/wiki/SoapClient
> sin éxito, es obvio que no la estoy usando bien por que veo que es bastante
> configurable, si me das solo una guía por donde seguir yo le doy...
>
>
> Un abrazo...
>
>
> ____________________________________
> Todo lo que no es dado es perdido
>
>
> 18/08/13 10:12:21, Mariano Reingart <reingart en gmail.com>:
>
> Federico:
>
> Para consumir (usar) un webservice con pysimplesoap sería similar a
> suds , debes crear el cliente y llamar a los métodos.
> No hace falta crear clases ni nada complejo, las estructuras de datos
> se manejan con tipos simples de python, por lo que no deberías tener
> algunos de los problemas de suds y otras librerías similares.
>
> Usando el ejemplo que dieron en otro email (tendrías que cambiar el
> wsdl para tu caso):
>
>>>> from pysimplesoap.client import SoapClient
>>>>
>>>> WSDL = "http://pruebas.ecodex.com.mx:2044/ServicioSeguridad.svc?wsdl"
>>>> client = SoapClient(wsdl=WSDL, ns="s")
>
> Luego podes inspeccionar client.services para ver que servicios y
> métodos expone:
>
> {'Seguridad': {'documentation': '',
> 'ports': {'PuertoSeguridad': {
> 'location': 'http://pruebas.ecodex.com.mx:2044/ServicioSeguridad.svc',
> 'name': 'PuertoSeguridad',
> 'operations': {'ObtenerToken': {
> 'action': 'http://Ecodex.WS.Model/2011/CFDI/Seguridad/ObtenerToken',
> 'documentation': '',
> 'header': None,
> 'input': {'SolicitudObtenerToken': {
> 'RFC': str,
> 'TransaccionID': long}},
> 'name': 'ObtenerToken',
> 'output': {'RespuestaObtenerToken': {
> 'Token': str,
> 'TransaccionID': long}},
> 'parts': {'input_body': None,
> 'input_header': None,
> 'output_body': None,
> 'output_header': None}}},
> 'port_type_name': 'Seguridad',
> 'service_name': 'Seguridad',
> 'soap_uri': 'http://schemas.xmlsoap.org/wsdl/soap/',
> 'soap_ver': 'soap11',
> 'transport': 'http://schemas.xmlsoap.org/soap/http'},
> 'PuertoSeguridadSeguro': {
> 'location': 'https://pruebas.ecodex.com.mx:2045/ServicioSeguridad.svc',
> 'name': 'PuertoSeguridadSeguro',
> 'operations': {'ObtenerToken': {
> 'action': 'http://Ecodex.WS.Model/2011/CFDI/Seguridad/ObtenerToken',
> 'documentation': '',
> 'header': None,
> 'input': {'SolicitudObtenerToken': {
> 'RFC': str,
> 'TransaccionID': long}},
> 'name': 'ObtenerToken',
> 'output': {'RespuestaObtenerToken': {
> 'Token': str,
> 'TransaccionID': long}},
> 'parts': {'input_body': None,
> 'input_header': None,
> 'output_body': None,
> 'output_header': None}}},
> 'port_type_name': 'Seguridad',
> 'service_name': 'Seguridad',
> 'soap_uri': 'http://schemas.xmlsoap.org/wsdl/soap/',
> 'soap_ver': 'soap11',
> 'transport': 'http://schemas.xmlsoap.org/soap/http'}}}}
>
>
> En 'operations' podes ver que tiene una operación ObtenerToken, podes
> ver la firma con client.help:
>
>>>> print client.help('ObtenerToken')
>
> ObtenerToken(RFC=<type 'str'>, TransaccionID=<type 'long'>)
> -> {u'Token': <type 'str'>, u'TransaccionID': <type 'long'>}:
>
> Ahi te dice cuales son los parámetros, simplemente donde dice type str
> o long tenes que reemplazar por el valor.
> Te indica que devuelve un diccionario con dos claves Token y TransaccionID.
>
> Para llamar al método remoto sería:
>
>>>> retval = client.ObtenerToken(RFC="Saraza", TransaccionID=1234)
>>>> print retval['Token']
>>>> print retval['TransaccionID']
>
> Te adjunto un ejemplo completo con lo que envió Mauricio.
>
> Cualquier cosa avisame y lo vemos,
>
> Sds
>
> Mariano Reingart
> http://www.sistemasagiles.com.ar
> http://reingart.blogspot.com
>
>
> 2013/8/18 Federico Manuel Echeverri Choux <echeverrifm en gmail.com>:
>> Hola!!!! gente, probe los que me dijeron el tuyo angel lo probe con dos
>> webservice, uno me funciono y el otro me da error
>> Esto Use:
>>
>> from suds.client import Client
>> url = 'http://localhost:7080/webservices/WebServiceTestBean?wsdl'
>> client = Client(url)
>>
>>
>>
>> el que te comente que me da error me devuelve esto:
>>
>>
>> File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 177, in
>> add_children
>> child = Factory.create(c, self)
>> File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 920, in create
>> return fn(root, definitions)
>> File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 432, in
>> __init__
>> NamedObject.__init__(self, root, definitions)
>> File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 90, in __init__
>> WObject.__init__(self, root, definitions)
>> File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 58, in __init__
>> Object.__init__(self)
>> File "/usr/lib/python2.7/dist-packages/suds/sudsobject.py", line 132, in
>> __init__
>> self.__metadata__ = Metadata()
>> RuntimeError: maximum recursion depth exceeded
>>
>>
>> Lo tuyo Mariano aun no lo entiendi muy bien, ahora me dedico a eso a ver
>> que
>> me sale.
>>
>> Que tan grave es que publique el link??
>>
>> es este: ( Modificado )
>>
>> https://webservice.com/WS_WSDI/WebServices.WSDI.Timbrado.svc?wsdl
>>
>> Saludos y Gracias
>>
>>
>>
>>
>>
>> El 15 de agosto de 2013 18:35, Angel Java Lopez <ajlopez2000 en gmail.com>
>> escribió:
>>>
>>> Hola gente!
>>>
>>>
>>> Federico, apenas si programo en Python, apenas lo conozco. Pero
>>> cualquiera
>>> que vaya a consumir WCF trata de sacar todo de lo que el WSDL (Web
>>> Service
>>> Description Language). Fijate que aca dice en general como obtenerlo:
>>>
>>>
>>>
>>> http://www.warden.pl/2013/02/21/consuming-wsdl-web-services-with-perl-or-python/
>>>
>>> Y ahi usa una libreria suds
>>> https://fedorahosted.org/suds/
>>>
>>> que dado el WSDL, te deja ya armado el metodo de invocacion, con monio
>>> parece ;-)
>>>
>>> Te funciono?
>>>
>>> Nos leemos!
>>>
>>> Angel "Java" Lopez
>>> @ajlopez
>>>
>>>
>>>
>>> 2013/8/15 Federico Manuel Echeverri Choux <echeverrifm en gmail.com>
>>>>
>>>> Hola!!!! gente, alguien hizo algo con webservice WCF?? alguna doc que me
>>>> puedan pasar para ver si puedo hacer esto.
>>>>
>>>> Muchisimas gracias de antemano
>>>>
>>>>
>>>> --
>>>> Federico Manuel Echeverri Choux
>>>> Vauxoo - OpenERP's Gold Partner
>>>> mobile: (+521) 444-1-400683
>>>> Tel: (+52) 444-8185539
>>>> skype: echeverrifm
>>>> web: http://www.vauxoo.com
>>>> twitter: @echeverrifm
>>>> @vauxoo
>>>>
>>>> _______________________________________________
>>>> pyar mailing list pyar en python.org.ar
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>
>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>> Argentina - http://www.usla.org.ar
>>>
>>>
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>>
>>
>>
>> --
>> Federico Manuel Echeverri Choux
>> Vauxoo - OpenERP's Gold Partner
>> mobile: (+521) 444-1-400683
>> Tel: (+52) 444-8185539
>> skype: echeverrifm
>> web: http://www.vauxoo.com
>> twitter: @echeverrifm
>> @vauxoo
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
> Adjuntos : [test_mauricio.py]
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: test_mauricio2.py
Type: application/octet-stream
Size: 978 bytes
Desc: no disponible
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130820/6578e6aa/attachment.obj>


More information about the pyar mailing list