desde - soap wsdl python
Usando SUDS para probar WSDL (3)
La conexión rechazada indica que el servidor no está allí. ¿Puede acceder a http://10.51.54.50/ptz.wsdl en un navegador o mediante curl? De lo contrario, comience por ejecutar el servicio SOAP primero y luego vuelva a intentarlo.
¿Alguien sabe sobre un buen tutorial de SUDS? Estoy tratando de ejecutar pruebas en archivos WSDL y tengo problemas para encontrar cualquier información sobre cómo hacer esto. Es SUDS muy diferente a SOAPy y cualquiera lo recomendaría para ejecutar pruebas de humo en funciones almacenadas en archivos WSDL.
He leído que SOAPAy ya no es compatible con Python 2.6+. ¿Es esto cierto?
Tengo un archivo WSDL que he ingresado:
from suds.client import Client
client = Client(''http://10.51.54.50/ptz.wsdl'')
client.service.GetNode()
Tengo este error:
in open
response = self._open(req, data)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 407, in _open
''_open'', req)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 367, in _call_chain
result = func(*args)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1146, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1121, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 111] Connection refused>
¿Alguien sabe por qué ocurre esto?
Puedo conectarme a este archivo a través de mi navegador. He instalado todos los paquetes de espuma. ¿Se requiere alguna otra configuración?
Suds es muy simple de usar.
from suds.client import Client
client = Client("http://example.com/foo.wsdl")
client.service.someMethod(someParameter)
someMethod
es el nombre de un método como se describe en WSDL.
En mi caso, fue un error estúpido (como cualquier otro error).
La URL que había usado para inicializar mi servicio era algo así como
Uri httpUri = new Uri("http://localhost:8000/CalculatorService");
Pude acceder a este servicio desde un cliente python que se ejecuta en la misma máquina que el servicio. Pude navegar el wsdl desde un navegador tanto localmente como desde una máquina remota. Sin embargo, cuando intenté acceder a este servicio desde una máquina remota, recibí un error de conexión rechazada. Lo extraño fue que en wireshark, pude ver que el servicio devuelve el wsdl al cliente remoto. Después de perder un par de horas, habilité el registro
logging.getLogger(''suds.client'').setLevel(logging.DEBUG)
logging.getLogger(''suds.transport'').setLevel(logging.DEBUG)
logging.getLogger(''suds.xsd.schema'').setLevel(logging.DEBUG)
logging.getLogger(''suds.wsdl'').setLevel(logging.DEBUG)
Los registros mostraron que las suds descargaron el wsdl del servidor, pero después de eso, intentaron conectarse a localhost: 8000. Y eso explicaba que la conexión rechazó el error. Acabo de cambiar el URI en el servidor WCF para
Uri httpUri = new Uri("http://192.168.0.1:8000/CalculatorService");
Y eso resolvió mi problema