|
Ответ от web-сервиса (WSDL/SOAP/XDTO) | ☑ | ||
---|---|---|---|---|
0
MagaDann
16.05.16
✎
11:30
|
Впервые пользуюсь этим объектом и вообще таким обменом.
Как получить ответ от веб-сервиса, если у него есть только процедура отправки (которая, конечно, ничего не возвращает)? Я создаю описание фабрики, все прокси и SSL подключаются отлично, вот этот кусок отрабатывает без ошибок: Прокси = Новый WSПрокси(Новый WSОпределения(WSDL.Адрес), WSDL.Пространство, WSDL.Сервис, WSDL.Порт); WSПараметр = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Пакеты.Получить(WSDL.Пространство2).Получить(WSDL.ПараметрПередачи)); <..заполнение объекта...> Прокси.ПроцедураОтправки(WSПараметр); Но админ веб-сервиса (сторонний) утверждает, что ничего у него не загружалось. Говорит, получи сначала ответ "200" или ответ "500", а потом посмотрим. Можно вообще получить ответ? |
|||
1
hhhh
16.05.16
✎
12:07
|
вроде там не нужно так глобально, создавать фабрики. Параметры и типы можно вытащить из ws-ссылки.
|
|||
2
Cyberhawk
16.05.16
✎
12:09
|
Для таких случаев (проверить коннект) по правилам хорошего тован реализуют веб-сервис Hello(), возвращающий какую-нибудь строку типа "Success"
|
|||
3
Cyberhawk
16.05.16
✎
12:10
|
*тона
|
|||
4
MagaDann
16.05.16
✎
12:14
|
(1) делаю на лету, без ws-ссылки, но это не важно.
(2) т.е. таки заставить веб-админа запилить функцию? |
|||
5
Cyberhawk
16.05.16
✎
12:24
|
(4) Ну если есть возможность "заставить" (попросить), то попроси. Пусть будет какой-нибудь веб-сервис без параметров. Тогда сможешь _быстро_ проверить доступность не только через 1С, но и из SoapUI.
Но вообще тебе в данном случае это вряд ли поможет, ибо неясно, что такое "ничего у него не загружалось" (куда?) и как это связано с передачей параметра в веб-сервис |
|||
6
MagaDann
16.05.16
✎
12:39
|
(5) ну, процедура называется типа "ОтправкаДанных", в параметре массив, по идее, сервис должен принять этот массив
|
|||
7
Cyberhawk
16.05.16
✎
12:40
|
(6) Кинь ссылку на WSDL-описание
|
|||
8
MagaDann
16.05.16
✎
13:32
|
||||
9
Cyberhawk
16.05.16
✎
13:45
|
(8) А почемы ты вызываешь метод "ПроцедураОтправки"? Его нет в WSDL-описании...
Покажи полностью рабочий код, начиная от получения WSDL-определения из WSDL-файла и заканчивая вызовом метода веб-сервиса, без вырезания кусков кода и замены кусков кода |
|||
10
MagaDann
16.05.16
✎
14:03
|
(9) в ПолучитьОбъекты() просто выборка по запросу с теми же полями.
мПрокси = Новый ИнтернетПрокси(); мПрокси.Установить(Объект.ПроксиТип, Объект.ПроксиАдрес, Объект.ПроксиПорт); мSSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено); Для Каждого WSDL Из Объект.СписокWSDL Цикл Прокси = Новый WSПрокси(Новый WSОпределения(WSDL.Адрес,,,,,мSSL), "http://localhost/Item", "WebServiceService", "WebServicePort", мПрокси); ТипWSПараметра0 = Прокси.ФабрикаXDTO.Пакеты.Получить("http://www.mysite.com/xml/Item").Получить("ListOfItemTopElmt"); WSПараметр0 = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра0); ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://www.mysite.com/xml/Item").Получить("ListOfItem"); WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра); Выборка = ПолучитьОбъекты(); Пока Выборка.Следующий() Цикл ТипWSПараметра1 = Прокси.ФабрикаXDTO.Пакеты.Получить("http://www.mysite.com/xml/Item").Получить("Site"); WSПараметр1 = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра1); ЗаполнитьЗначенияСвойств(WSПараметр1, Выборка); WSПараметр["Site"].Добавить(WSПараметр1); КонецЦикла; WSПараметр0["ListOfItem"] = WSПараметр; Прокси.Data_Outbound(WSПараметр0); КонецЦикла; |
|||
11
Cyberhawk
16.05.16
✎
14:06
|
В отладчике уже смотрел, что структура полей WSПараметр0 и WSПараметр совпадает с требуемой (в WSDL-файле там в итоге заворачиваются структуры из двух строковых реквизитов)?
|
|||
12
Serginio1
16.05.16
✎
14:17
|
Фиддлером посмотри что возвращается
|
|||
13
MagaDann
16.05.16
✎
14:22
|
(11) https://goo.gl/crb6OX
Вот тут, кстати, вопрос. Параметр имеет тип "ListOfItemTopElmt", который в свою очередь заполняется параметром "ListOfItem", но там указан не "тип", а "ссылка". При этом WSПараметр0["ListOfItem"] = WSПараметр нормально заполняется. |
|||
14
MagaDann
17.05.16
✎
09:26
|
Сделали мне функцию вместо процедуры, возвращает, кажется, 504 ошибку, "Истекло время ожидания шлюза"...
|
|||
15
Serginio1
17.05.16
✎
09:50
|
А зачем такие сложности. У каждого параметра есть Тип.
Фабрика=Прокси.ФабрикаXDTO; ТипПараметра=Фабрика.Тип(ПространствоИмен,ИмяТипа); И короче и понятнее |
|||
16
Serginio1
17.05.16
✎
09:51
|
В твоем случае
ТипWSПараметра0 = Фабрика.Тип("http://www.mysite.com/xml/Item","ListOfItemTopElmt"); |
|||
17
Serginio1
17.05.16
✎
09:55
|
Попробуй скачать WSDL и ссохранить его на диск
ОпределениеТ=Новый WSОпределения(ПутьК_wsdl); WSСервис=ОпределениеТ.Сервисы[0]; ПроксиWS=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя,,,Новый ЗащищенноеСоединениеOpenSSL()); |
|||
18
MagaDann
17.05.16
✎
11:15
|
Заметил косяк...
WSDL у меня на https, а если посмотреть точку подключения, то там http. Как сделать так, чтобы в точку подключения попал https? Свойство ТочкаПодключения только для чтения. Сетевой прокси делаю на 443. |
|||
19
Serginio1
17.05.16
✎
12:07
|
(18) Если нужен https то измени путь в WSDL
soap:address location Ну и проконсультируйся с разработчиками. Если http то и параметр защищенное соединение не нужно |
|||
20
MagaDann
17.05.16
✎
17:43
|
(19) Да, поменяли на https в WSDL.
Но ещё и поменяли процедуру, теперь есть выходной параметр statuscode string (http://www.w3.org/2001/XMLSchema) Его как сделать? statuscode = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"); Так? |
|||
21
Serginio1
17.05.16
✎
22:24
|
Если тип простой (строка,число, дата) то можно просто указать строку.
Если сложный или AnyType то нужно через ТипСтрока = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"); statuscode=Фабрика.Создать(ТипСтрока ,Значениеstatuscode); Все Out параметры должны идти последними в методе |
|||
22
hhhh
18.05.16
✎
06:30
|
(20) там вроде есть отладка, когда публикуешь веб-сервис, ставишь галку отладка и параметры задаешь. И потом прямо идешь отладчиком и попадаешь в веб сервис, смотришь все поля.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |