[pyar] Web service de tipo WCF

Mariano Reingart reingart en gmail.com
Dom Ago 18 12:12:21 ART 2013


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
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: test_mauricio.py
Type: application/octet-stream
Size: 884 bytes
Desc: no disponible
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130818/df295a5d/attachment.obj>


More information about the pyar mailing list