:: Visual Foxpro, Foxpro for DOS
Доступ к сервисам SOAP,XML, как передать параметры?
EgorDudkin
Автор

Сообщений: 3
Дата регистрации: 20.06.2012
Здравствуйте!
Столкнулся с проблемой.

Есть описание типа UserInfo с полями:
1. Имя Текст User
2. Пароль Текст Password

В кусок запроса на XML
<soapenv:Header/><soapenv:Body><tem:RDCard><tem:user><tec:Name>testuser</tec:Name><tec:Password>testpass123</tec:Password></tem:user><tem:card> ......

Есть метод
GetCard
Структура пакета запроса которого
Тип
--------
Пользователь UserInfo user
ТекстОтметки Текст textOtm

Вызываю через:
o=CREATEOBJECT("MSSoap.SoapClient30")
o.MSSoapInit("http://..... .svc?wsdl")
tt=o.GetCard('testuser','testpass123','Поисковая строка')

В результате ошибка.
...Expecting state 'Element',,Encountered 'Text' with name", namespace".'. Please see InnerException...

Я так понимаю, что не верно передаю параметры UserInfo. Пробовал загнать в массив, не помогло.

Прошу подскажите кто сталкивался с подобными вопросами, где рыть?
Как передать параметром структуру типа UserInfo?
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Soap Toolkit напрямую не поддерживает ничего кроме примитивных типов. Особенно в плане "создать и послать" (т.к. при приёме хотя-бы получаем XML-DOM из которого можно сравнительно просто извлечь отдельные свойства). Оперировать же его "расширенными интерфейсами" из фокса - не видел таких примеров, и не советую заморачиваться. Благо есть другие варианты.

Почитай тут www.code-magazine.com


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
EgorDudkin
Автор

Сообщений: 3
Дата регистрации: 20.06.2012
Igor Korolyov
Soap Toolkit напрямую не поддерживает ничего кроме примитивных типов. Особенно в плане "создать и послать" (т.к. при приёме хотя-бы получаем XML-DOM из которого можно сравнительно просто извлечь отдельные свойства). Оперировать же его "расширенными интерфейсами" из фокса - не видел таких примеров, и не советую заморачиваться. Благо есть другие варианты.
Почитай тут www.code-magazine.com

Да, все сложнее чем я думал...

Спасибо за наводку! Буду копать дальше. )))
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Димон71

Сообщений: 80
Дата регистрации: 08.02.2005
Вот так заработает 99%
tt=o.GetCard('<soapenv:Header/><soapenv:Body><tem:RDCard><tem:user><tec:Name>testuser</tec:Name><tec:Password>testpass123</tec:Password></tem:user><tem:card>')

Ты должен передать подготовленный XML в формате требуемым WSDL. Фокс сам это не делает. Може есть какие то объекты специальные для этого я не заморачивался. Смотри формат запроса WSDL и пиши ручками XML запрос и все заработает.
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
В общем и целом ДА, только не нужно при этом использовать MSSoap.SoapClient30 - это корявый и малоочевидный хак.
Берём любой HTTP транспорт (например MSXML2.XMLHTTP) и полностью soap пакет формируем, отсылаем, принимаем ответ... Если уж очень охота работать с компонентами SOAP Toolkit - то надо смотреть в сторону класса SoapConnector - но там возни... Так что проще руками формировать и разбирать soap пакеты.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Руками в случае SOAP работать намного проще и быстрее, да и нет заморочек с установкой ActiveX. Как-то было у меня такая задача. Без OLE обёртки все оказалось очень просто.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ну, учитывая что HTTP транспорт это всё же обычно именно активикс (другое дело что тот же MSXML в каком-то виде всегда есть в современных виндах - если не зашиваться на конкретную версию то можно и обойтись без "доустановок")... Или достаточно сложный и вроде как небесплатный класс от WestWind...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
EgorDudkin
Автор

Сообщений: 3
Дата регистрации: 20.06.2012
Спасибо други!
Я с веб сервисами никогда не сталкивался, но вот пришлось. ))
Читая ваши ответы, беседу между вами, получаю точки отсчета так сказать, копаю по ним.
Уже несколько дней перерываю интернет, нужно сказать не мало нового узнал о лисе для себя и в темах не касающихся конкретно этой. ))
Все больше убеждаюсь, что зря закрыли Фокс проект.

PS: Интересный момент...))) Родственники мои живут в Добруше и Гомеле, а сам я в Ростове-на-Дону ))))
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Igor Korolyov
В общем и целом ДА, только не нужно при этом использовать MSSoap.SoapClient30 - это корявый и малоочевидный хак.
Берём любой HTTP транспорт (например MSXML2.XMLHTTP) и полностью soap пакет формируем, отсылаем, принимаем ответ... Если уж очень охота работать с компонентами SOAP Toolkit - то надо смотреть в сторону класса SoapConnector - но там возни... Так что проще руками формировать и разбирать soap пакеты.

Скажите, пожалуйста, как заменить SOAP на MSXML2.XMLHTTP и вызвать методы SOAP. Правильно, если я напишу таким образом? Сам сервис пока не работает, и проверить не могу.
oHTTP = CREATEOBJECT("MSXML2.XMLHTTP")
pServer = 'http://188.242.59.136:8888/auth?wsdl'
TEXT TO m.SOAP TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetServiceToken xmlns="http://tempuri.org/">
<login><<pLogin>></login>
<psw><<pPassword>></psw>
</GetServiceToken>
</s:Body>
</s:Envelope>
ENDT
oHTTP.open("POST", pServer, .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.GetServiceToken(0h+m.SOAP)
DO WHILE oHTTP.readyState <> 4
DOEVENTS FORCE
ENDDO



Исправлено 2 раз(а). Последнее : Аркадий, 23.09.16 15:29
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Нет. Как минимум у объекта MSXML2.XMLHTTP нету метода GetServiceToken - нужно банальный send использовать.
Правильный ли приведен "текст" самого запроса - я не в курсе. Кроме того содержимое вставляемых текстовых кусков нужно экранировать (заменять угловые кавычки и некоторые другие спецсимволы, возможно кодировать тексты в UTF-8) - чтобы они соответствовали допустимому внутри XML тегов формату...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Вот-вот. Так как же быть, если этот SOAP содержит множество методов? Как в MSXML2.XMLHTTP указать, какой вызывается?

Ratings: 1 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Аркадий
Так как же быть, если этот SOAP содержит множество методов? Как в MSXML2.XMLHTTP указать, какой вызывается?
в данном случае MSXML это только транспорт - по нему посылаются команды и принимаются ответы от сервиса. ЧТО должен делать сервис указано прямо в теле команды - внимательно посмотри на посылаемый XML - там прямо указано имя "метода" который должен выполнить сервис. А в ответе явно указано что за результат этот ответ принёс. Всё это "формально" описано в wsdl - конечно если таковой имеется (зачастую сам сервис возвращает этот "файл" в ответ на специальный запрос с ?wsdl на конце) Там и все поддерживаемые сервисом методы и какие именно ответы будут посланы (в т.ч. входные параметры, выходные параметры/типы данных).
Помимо "тела" запроса так же важно правильно задать заголовки запроса - т.е. выполнить правильную последовательность
oHTTP.setRequestHeader(...)
Далеко не только один единственный "Content-Type" может потребоваться для работы с конкретным сервисом...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
dimuhametov

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
Igor Korolyov
Всё это "формально" описано в wsdl - конечно если таковой имеется
Привет всем. Возникла ситуация когда имеется физически файл syncChannel.wsdl в котором расписаны методы и ответы.
Сама ссылка на на сервер не содержит специальный запрос "?wsdl".
Вопрос в том, как "прикрутить" имеющийся syncChannel.wsdl к запросу? Или никак ? Спасибо


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
mеdstraх

Сообщений: 275
Дата регистрации: 25.01.2020
50 баксов.


P.S.
Давно уже пора монетизировать ресурс и ответы на нем
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Фу таким быть, Серега.

() правда вопрос ТС-а непонятен, что за адрес...



Исправлено 1 раз(а). Последнее : of63, 15.02.20 09:59
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
dimuhametov

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
of63
Фу таким быть, Серега.
() правда вопрос ТС-а непонятен, что за адрес...
Если адрес сервера, то типа такой "http://172.31.32.7/bip-sync/"


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Олег (?)... ты вроде разбирал такие сайты... мдя, погорячиля, у меня в РФ это не открылось, но...



Исправлено 1 раз(а). Последнее : of63, 15.02.20 10:20
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
dimuhametov

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
of63
Олег (?)... ты вроде разбирал такие сайты... мдя, погорячиля, у меня в РФ это не открылось, но...
Не откроется, мне общий принцип нужен, если он существует. Или баксы копить для Медстраха


------------------
Незнание делает жизнь такой интересной.




Исправлено 2 раз(а). Последнее : dimuhametov, 15.02.20 10:26
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Общий принцип - сделай ДОМ, и в ем ищи, всякие тэги. Нет?
Ratings: 0 negative/0 positive
Re: Доступ к сервисам SOAP,XML, как передать параметры?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
dimuhametov
Вопрос в том, как "прикрутить" имеющийся syncChannel.wsdl к запросу? Или никак ? Спасибо
Зачем?
Ты, используя какой-то WinAPI метод в программе обязательно к нему "прикручиваешь" ссылку на статью MSDN описывающую данный метод?

Конечно же wsdl это гораздо более формальный способ описания АПИ, и он может использоваться более высокоуровневыми библиотеками (к примеру Soap toolkit - но он уже 20 лет как умер) для того чтобы динамически создавать прокси-объекты, и "общение" с сервисом выглядело как работа с обычными объектами.
Но если работать на уровне HTTP запросов, то wsdl нужен исключительно как документация для правильного составления запросов.


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 25 (Гостей: 25)

© 2000-2024 Fox Club 
Яндекс.Метрика