Похоже, у вас сломан WSDL.Здесь вам необходимо использовать ImportDoctor
, предоставленный SUDS.Вы должны использовать это, чтобы помочь конструктору Client
использовать тип ArrayOfint
, найденный в http://schemas.microsoft.com/2003/10/Serialization/Arrays
.
В прошлом я делал это с другими службами, но не видя ваш WSDL или ваш код, это только мое лучшее предположение о том, как вы можете это исправить, потому что я сам не могу его проверить:
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)
Стоит отметить, что URL http://schemas.microsoft.com/2003/10/Serialization/Arrays даже недействителен (он возвращает 404), поэтому я действительно не уверен, что это правильный URL.Хотя я уверен, что по крайней мере направляю вас в правильном направлении.
Отредактируйте в ответ на ваш недавний комментарий (2010-10-05):
ИспользованиеURL, который вы указали https://developer-api.affili.net/V2.0/Logon.svc?wsdl
Мне удалось успешно создать клиента.Мне пришлось использовать ImportDoctor
, потому что он вызвал следующую ошибку:
TypeNotFound: Type not found: '(Logon, http://affilinet.framework.webservices/types, )'
Поэтому я использовал следующий код и смог получить успешный объект клиента:
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)
Печатьобъект клиента отображает это:
Suds (https://fedorahosted.org/suds/) версия: 0.3.9 GA build: 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
Прежде чем вы сможете использовать client.service.Logon()
you 'нам нужно будет соответствовать сигнатуре типа, требуемой этим методом.Вам придется создавать объекты различных типов, используя client.factory.create()
(например, client.factory.create('ns0:WebServiceTypes')
), и передавать эти объекты вместе с вашим именем пользователя / паролем.