On dirait que vous avez un WSDL cassé. C'est ici que vous devrez utiliser le ImportDoctor
fourni par SUDS. Vous devez l'utiliser pour aider le constructeur Client
à utiliser le type ArrayOfint
trouvé à http://schemas.microsoft.com/2003/10/Serialization/Arrays
.
Je l'ai fait dans le passé avec d'autres services, mais sans voir votre WSDL ou votre code, ce n'est que ma meilleure estimation que la façon dont vous pouvez le corriger parce que je ne peux pas tester moi-même:
from suds.client import Client
from suds.xsd.doctor import Import, ImportDoctor
# Obviously I made this up
wsdl_url = 'http://whatever/path/to/wsdl'
# Fix missing types with ImportDoctor
schema_url = 'http://schemas.microsoft.com/2003/10/Serialization/Arrays'
schema_import = Import(schema_url)
schema_doctor = ImportDoctor(schema_import)
# Pass doctor to Client
client = Client(url=wsdl_url, doctor=schema_doctor)
Une chose à noter est que l'URL http://schemas.microsoft.com/2003/10/Serialization/Arrays n'est même pas valide (elle renvoie un 404), donc je ne suis vraiment pas sûr que ce soit la bonne URL. Bien que je sois confiant, je vous dirige au moins dans la bonne direction.
Modifier en réponse à votre commentaire récent (2010-10-05):
En utilisant l'URL que vous avez fourni des https://developer-api.affili.net/V2.0/Logon.svc?wsdl
j'ai pu créer avec succès un client. Je devais utiliser un ImportDoctor
parce qu'il a soulevé l'erreur suivante:
TypeNotFound: Type not found: '(Logon, http://affilinet.framework.webservices/types,)'
J'utilisé le code suivant et a été en mesure d'obtenir un objet client réussie:
from suds.client import Client
from suds.xsd.doctor import Import, ImportDoctor
wsdl_url = 'https://developer-api.affili.net/V2.0/Logon.svc?wsdl'
schema_url = 'http://affilinet.framework.webservices/types'
schema_import = Import(schema_url)
schema_doctor = ImportDoctor(schema_import)
client = Client(url=wsdl_url, doctor=schema_doctor)
impression de l'objet client affiche ceci:
Suds (https://fedorahosted.org/suds/) Version: 0.3.9 build GA: R659-20100219
Service (Authentication) tns="http://affilinet.framework.webservices/Svc"
Prefixes (5)
ns0 = "http://affilinet.framework.webservices/types"
ns1 = "http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF"
ns2 = "http://schemas.microsoft.com/2003/10/Serialization/"
ns3 = "http://schemas.microsoft.com/2003/10/Serialization/Arrays"
ns4 = "http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation"
Ports (1):
(DefaultEndpointLogon)
Methods (2):
GetIdentifierExpiration(xs:string CredentialToken,)
Logon(xs:string Username, xs:string Password, ns0:WebServiceTypes WebServiceType, ns0:TokenDeveloperDetails DeveloperSettings, ns0:TokenApplicationDetails ApplicationSettings,)
Types (12):
ns3:ArrayOfKeyValueOfstringstring
ns1:ArrayOfValidationDetail
ns0:Logon
ns0:TokenApplicationDetails
ns0:TokenDeveloperDetails
ns1:ValidationDetail
ns4:ValidationFault
ns0:WebServiceTypes
ns0:affilinetWebserviceFault
ns2:char
ns2:duration
ns2:guid
Avant de pouvoir utiliser client.service.Logon()
, vous devrez satisfaire à la signature de type requise par cette méthode. Vous devrez créer divers objets de type en utilisant client.factory.create()
(par exemple client.factory.create('ns0:WebServiceTypes')
) et transmettre ces objets avec votre nom d'utilisateur/mot de passe.
Un exemple de code reproduisant le problème peut être utile. –