Я пытался написать клиенту для доступа к веб-сервису для работы. Я успешно написал клиентов, использующих 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.'
Запрос Посылаю отсутствует фактические проверки подлинности Счетчики и т.д. Там это не метод их генерации. Я пытаюсь избежать написания запросов xml вручную, а затем отправка их имеет простой HTTP-запрос. – grantk
попытайтесь изучить этот пример. http://svn.fedorahosted.org/svn/suds/trunk/tests/rhq.py. Обратите внимание, как пример создает объекты, а затем помещает их в объект person, а затем вызывает службу с этим человеком. – sankyo
Еще раз спасибо, я вижу, как используются объекты человека. Я также могу создать объекты, перечисленные в моем сервисе. Проблема в том, что нет никакого реального метода для создания любого из этих объектов на стороне сервера или любых методов, которые принимают их как аргументы. Я закончил создание запроса вручную и отправил его, теперь я могу получить ответ (я использовал Java, хотя) – grantk