Я пытался написать клиент для доступа к веб-сервису для работы. Я успешно написал клиентов, использующих SUDS и ZSI с Python. Я использовал NetBeans 6.9 для написания нескольких Java-клиентов. Все успешные клиенты имеют доступ к свободно доступным веб-сервисам, которые я нашел в Интернете.
Клиент, с которым мне нужно связаться для работы, оказывается не таким дружелюбным. Требуется аутентификация:
http://www.cmicdataservices.com/datacenter/service.asmx
Если я беру описания WSDL этого веб-сервиса, я вижу, что есть шесть методов.
Methods (6):
CheckIfAuthorized()
DataProcessed()
GetCurrentDataVer1()
GetID()
LogDSCStatus(xs:string _clientname, xs:string _status, xs:string _errormsg)
ResetNewDataReferences()
Также возвращено 70 типов. Одним из них является тип аутентификации.
В моих клиентах Python и Java я смог создать эти объекты аутентификации, но не смог ничего сделать дальше.
В WSDL нет никаких указаний на то, что существует какой-либо способ создания этих объектов аутентификации с помощью того, что доступно. Поставщик веб-сервиса действительно предлагает клиент, созданный с использованием Adobe Air, и я могу проверить его, чтобы убедиться, что я могу аутентифицироваться на веб-сервисе и использовать его.
Это первый раз, когда мне приходилось взаимодействовать с веб-службой, и я не уверен, что здесь что-то отсутствует. Может кто-нибудь сказать мне, если есть что-то очевидное, что я здесь упускаю, как для проверки подлинности с помощью этой службы?
Вот клиент Python, который я написал, плюс его вывод. Вы можете увидеть хорошую распечатку информации WSDL, если раскомментируете строку клиента печати.
#!/usr/bin/python
from suds.client import Client
url='http://www.cmicdataservices.com/datacenter/service.asmx?wsdl'
client = Client(url)
#print client
print client.service.CheckIfAuthorized()
Выход:
Traceback (most recent call last):
File "CMICTest.py", line 23, in <module>
print client.service.CheckIfAuthorized()
File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg /suds/client.py", line 542, in __call__
return client.invoke(args, kwargs)
File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", line 602, in invoke
result = self.send(soapenv)
File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", line 649, in send
result = self.failed(binding, e)
File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", line 702, in failed
r, p = binding.get_fault(reply)
File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/bindings /binding.py", line 265, in get_fault
raise WebFault(p, faultroot)
suds.WebFault: Server raised fault: 'Server was unable to process request. ---> Object reference not set to an instance of an object.'