:: Visual Foxpro, Foxpro for DOS
Помогите с Вэб сервисом.
Sergey_K
Автор

Сообщений: 15
Дата регистрации: 07.05.2018
Добрый день.
Вэб сервис написан на Foxpro (dll).
WSDL сгенерирован SOAP Toolkit 3.0.
* Пример
loXmlHttp = CREATEOBJECT('Msxml2.XMLHTTP.6.0')
SET TEXTMERGE ON
TEXT TO m.cSoap NOSHOW
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<test xmlns="http://192.168.12.90/"/>
</Body>
</Envelope>
ENDTEXT
loXmlHttp.Open("POST",'http://192.168.12.90/TEST.WSDL',.F.)
loXmlHttp.setRequestHeader('Content-Type', 'application/soap+xml; charset=utf-8')
loXmlHttp.setRequestHeader('Content-length', TRANSFORM(LEN(m.cSoap)))
m._error=.F.
TRY
loXmlHttp.Send(cSoap)
CATCH
m._error=.T.
ENDTRY
IF m._error
WAIT WINDOW 'Ошибка.'
RETURN
ENDIF
WAIT WINDOW STR(loXmlHttp.status,4,0)+' '+ loXmlHttp.statusText
Понимаю, что проблемы в 'Content-Type' и в задании m.cSoap.
Но пока ничего не могу найти.
У кого-то есть примеры вызова такого Вэб сервиса при помощи CREATEOBJECT('Msxml2.XMLHTTP.6.0').
Если есть, поделитесь пожалуйста.
Спасибо.


------------------
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
А что возвращает сервис?
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
Sergey_K
Автор

Сообщений: 15
Дата регистрации: 07.05.2018
Получаю ошибку 500 Internal Server Error.
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
Sergey_K
Автор

Сообщений: 15
Дата регистрации: 07.05.2018
При использовании приложения Wizdler
при запросе:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<test xmlns="http://192.168.12.90/"/>
</Body>
</Envelope>

Получаю ответ:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAPSDK4:testResponse xmlns:SOAPSDK4="http://192.168.12.90/">
<Result>T5OV10PJ09</Result>
</SOAPSDK4:testResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Т.е. корректный ответ в <Result>T5OV10PJ09</Result>
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
хз, какие заголовки ждет сервер... ну, замени 'application/soap+xml' на просто 'text/xml'...
User-Agent какой-нибудь укажи...



Исправлено 1 раз(а). Последнее : of63, 04.02.20 18:41
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
Sergey_K
Автор

Сообщений: 15
Дата регистрации: 07.05.2018
Я уже перепробовал разные видов заголовков. Ответ тот же.
Странно, с этим Вэб сервисом работают коллеги используя C# и PHP.
У них проблем не возникает.
Аналогично и я работаю с WCF написанными на C#.
Хочется уйти от SOAP и больше не использовать CREATEOBJECT("MSSOAP.SOapClient30").
Но пока не могу найти ни ссылок, ни описания на альтернативный вариант.
Так что пока собственный сервис приходится вызывать по старинке, а хотелось используя CREATEOBJECT('Msxml2.XMLHTTP.6.0').
Спасибо за участие.
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Должен работать через MSXML. Сниферить надо, подглядеть заголовки в рабочей системе.
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
Grisha

Сообщений: 160
Дата регистрации: 07.07.2005
У меня был случай что просто табуляция мешала.
Попробуй так
loXmlHttp = CREATEOBJECT('Msxml2.XMLHTTP.6.0')
SET TEXTMERGE ON
TEXT TO m.cSoap NOSHOW
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<test xmlns="http://192.168.12.90/"/>
</Body>
</Envelope>
ENDTEXT
loXmlHttp.Open("POST",'http://192.168.12.90/TEST.WSDL',.F.)
loXmlHttp.setRequestHeader('Content-Type', 'application/soap+xml; charset=utf-8')
loXmlHttp.setRequestHeader('Content-length', TRANSFORM(LEN(m.cSoap)))
m._error=.F.
TRY
loXmlHttp.Send(cSoap)
CATCH
m._error=.T.
ENDTRY
IF m._error
WAIT WINDOW 'Ошибка.'
RETURN
ENDIF
WAIT WINDOW STR(loXmlHttp.status,4,0)+' '+ loXmlHttp.statusText
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
Sergey_K
Автор

Сообщений: 15
Дата регистрации: 07.05.2018
Ура!У меня получилось.

loXmlHttp = CREATEOBJECT('Msxml2.XMLHTTP.6.0')
SET TEXTMERGE ON
TEXT TO m.cSoap NOSHOW
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<test xmlns="http://192.168.12.90/"/>
</Body>
</Envelope>
ENDTEXT
loXmlHttp.Open("POST",'http://192.168.12.90/TEST.WSDL',.F.)
loXmlHttp.setRequestHeader("SOAPAction", "http://192.168.12.90/local_test.test")
loXmlHttp.setRequestHeader('Content-Type', "text/xml, charset=utf-8")
loXmlHttp.setRequestHeader('Content-length', TRANSFORM(LEN(m.cSoap)))
m._error=.F.
TRY
loXmlHttp.Send(cSoap)
CATCH
m._error=.T.
ENDTRY
IF m._error
WAIT WINDOW 'Error'
RETURN
ENDIF
WAIT WINDOW STR(loXmlHttp.status,4,0)+' '+ loXmlHttp.statusText

Вот 2 исправления. На них нужно было обратить внимание!

loXmlHttp.setRequestHeader("SOAPAction", "http://192.168.12.90/local_test.test")
loXmlHttp.setRequestHeader('Content-Type', "text/xml, charset=utf-8")

Спасибо всем!
Ratings: 0 negative/1 positive
Re: Помогите с Вэб сервисом.
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Sergey_K
Спасибо всем!

И тебе спасибо за публикацию конечного решения.
Давненько хотел отказаться SOAP, но все руки не доходили. Сейчас может и займусь.
Ratings: 0 negative/0 positive
Re: Помогите с Вэб сервисом.
Sergey_K
Автор

Сообщений: 15
Дата регистрации: 07.05.2018
Прошу прощения, оказывается это не конец.
Вот ещё вариант при работе с параметрами (увы, потратил много времени).

LOCAL loXmlHttp, m.cSoap, m._error
loXmlHttp = CREATEOBJECT('Msxml2.XMLHTTP.6.0')
SET TEXTMERGE ON
TEXT TO m.cSoap NOSHOW
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<q1:work_main xmlns:q1="http://192.168.12.90/">
<main_text xsi:type="xsd:string">main_string</main_text>
</q1:work_main>
</s:Body>
</s:Envelope>
ENDTEXT
loXmlHttp.Open("POST",'http://192.168.12.90/TEST.WSDL',.F.)
loXmlHttp.setRequestHeader("SOAPAction", "http://192.168.12.90/local_test.work_main")
loXmlHttp.setRequestHeader('Content-Type', "text/xml, charset=utf-8")
loXmlHttp.setRequestHeader('Content-length', TRANSFORM(LEN(m.cSoap)))
m._error=.F.
TRY
loXmlHttp.Send(cSoap)
CATCH
m._error=.T.
ENDTRY
IF m._error
WAIT WINDOW 'Ошибка.'
RETURN
ENDIF
WAIT WINDOW STR(loXmlHttp.status,4,0)+' '+ loXmlHttp.statusText

Вызывается метод "work_main" со строковым параметром "main_text"
Вот теперь всё.
Ratings: 0 negative/1 positive
Re: Помогите с Вэб сервисом.
Sergey_K
Автор

Сообщений: 15
Дата регистрации: 07.05.2018
Кстати, этот код отработал и на китайской VFP Advanced (x64).
Раньше отказывался от VFP Advanced (x64) из за того, что там не работал код CREATEOBJECT("MSSOAP.SOapClient30").
Теперь всё в порядке.
Ratings: 0 negative/1 positive


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

On-line: 16 kornienko_ru Burn  (Гостей: 14)

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