|
Помогите разобраться с web-сервисом. Как передать структуру (массив) как параметр ? | ☑ | ||
---|---|---|---|---|
0
Румата
14.12.17
✎
11:57
|
Начал разбираться с Веб - сервисами.
WSDL-файл, который является описанием web-сервиса, в конфигурацию загрузил. Его предоставил наш контрагент, с которым мы налаживаем обмен информацией. Приинициализировать объект-посредник (типа WSПрокси). НашСервис =WSСсылки.Портал.СоздатьWSПрокси("XXX","XXXX","ХХХХ"); Отладил, все нормально, подключается... Теперь хочу обратится к методу Веб-сервиса. Читаю документацию, а там в качестве параметра метода передается состовной параметры, т.е. параметр, который в моем случае состоит из трех параметров. Как этот составной параметр передать веб-сервису ? Подскажите пожалуйста, кто уже сталкивался ... |
|||
1
Mankubus
14.12.17
✎
12:02
|
(0)
СоставнойПараметр = НашСервис.ФабрикаXDTO.Создать(НашСервис.ФабрикаXDTO.Тип("ПространствоИмен","ИмяТипа")); СоставнойПараметр.Поле1 = ЗначениеПоля1; СоставнойПараметр.Поле2 = ЗначениеПоля2; СоставнойПараметр.Поле3 = ЗначениеПоля3; |
|||
2
asady
14.12.17
✎
12:04
|
(0) как правило это json объект
можно тупо сгенерить json строку и отправить |
|||
3
VS-1976
14.12.17
✎
12:06
|
(0) Загони web-сервис в WS-ссылки. Далее посмотри его XTDO ( для данной процедуры ). И загоняй в его структуру данные.
|
|||
4
Fragster
гуру
14.12.17
✎
12:06
|
(2) что за бред?
|
|||
5
Остап Сулейманович
14.12.17
✎
12:10
|
(4) Примерно так :
1. Сделать метод веб-сервиса с единственным входным параметром типа строка. 2. На вызывающей стороне все укладывать в строку (в строку с разделителями, в ХМЛ, в Джейсон) и скармливать ее методу веб-сервиса. 3. На стороне сервиса парсить строку и получать все три параметра. |
|||
6
Fram
14.12.17
✎
12:10
|
я б этим программистам, расшаривающим через SOAP методы со сложными параметрами, ноги бы отрывал
|
|||
7
Остап Сулейманович
14.12.17
✎
12:11
|
+ (5) Кстати так получалось передавать таблицу значений (правда с колонками простых типов), уложенную в ХранилищеЗначения.
|
|||
8
Fragster
гуру
14.12.17
✎
12:12
|
(5) нафига тогда SOAP? Она нужен, чтобы формализовать обмен, а не ради бессмысленного воерхэда
|
|||
9
Fragster
гуру
14.12.17
✎
12:12
|
(6) может ты просто не умеешь готовить?
|
|||
10
Fragster
гуру
14.12.17
✎
12:12
|
(7) возьми с полки пирожок
|
|||
11
Fragster
гуру
14.12.17
✎
12:13
|
(8)* оверхэда
|
|||
12
Остап Сулейманович
14.12.17
✎
12:14
|
+ (7) Кстати 1С в примере передачи ТабличногоДокумента на мобильное устройство поступало точно также. ТабличныйДокумент на стороне сервера укладывался в Хранилище. Передавался через ВЕБ-сервис. И на стороне мобильного устройства получался из Хранилища.
|
|||
13
Fram
14.12.17
✎
12:15
|
(9) ну, знаешь.. подготовить в 1с сложный параметр под метод соап вебсервиса написанного на java, то еще удовольствие
|
|||
14
Fram
14.12.17
✎
12:16
|
(13) способ (5) намного проще для обеих сторон
|
|||
15
Fragster
гуру
14.12.17
✎
12:17
|
(13) не вижу ничего сложного, если в wsdl всё описано.
|
|||
16
Fragster
гуру
14.12.17
✎
12:17
|
(14)->(8)
|
|||
17
Fram
14.12.17
✎
12:19
|
(15) при динамическом вызове (без создания объекта в конфе) это долго и муторно
|
|||
18
Fragster
гуру
14.12.17
✎
12:21
|
(17) ничуть, см пример в http://fragster.ru/wsfor1c/ (там, конечно, нет большой вложенности объектов, ибо пример), но воспользоваться нужной фабрикой без веб добавления ссылки в конфигурацию очень просто.
|
|||
19
Fram
14.12.17
✎
12:22
|
(16) ну, что предоставила другая сторона, тем и пользовались. это было лет 10 назад. тогда соап в моде был
|
|||
20
Fragster
гуру
14.12.17
✎
12:22
|
Прокси = Новый WSПрокси(Определение, ПространствоИменСервиса, ИмяСервиса, ИмяТочкиПодключения);
Фабрика = Определение.ФабрикаXDTO; ОбъектСервиса = Фабрика.Создать(Фабрика.Тип(ПространствоИменСервиса, "TestClass41")); ОбъектСервиса.a = Параметр41; ОбъектСервиса.b = Параметр42; ОбъектСервиса.res = 0; ОбъектРезультат = Прокси.test4(ОбъектСервиса); Результат41 = ОбъектСервиса.res; Результат42 = ОбъектРезультат.res; |
|||
21
Fragster
гуру
14.12.17
✎
12:23
|
для массива
Определение = Новый WSОпределения(АдресWSDL); Прокси = Новый WSПрокси(Определение, ПространствоИменСервиса, ИмяСервиса, ИмяТочкиПодключения); Фабрика = Определение.ФабрикаXDTO; ОбъектСервиса = Фабрика.Создать(Фабрика.Тип(ПространствоИменСервиса, "TestClass51")); Для Каждого Стр Из Параметр5 Цикл Элемент = Фабрика.Создать(Фабрика.Тип(ПространствоИменСервиса, "TestClass52")); ЗаполнитьЗначенияСвойств(Элемент, Стр); ОбъектСервиса.arr.Добавить(Элемент); КонецЦикла; ОбъектРезультат = Прокси.test5(ОбъектСервиса); Результат5.Очистить(); Для каждого ЭлементРезультата Из ОбъектРезультат.res Цикл Результат5.Добавить().res = ЭлементРезультата; КонецЦикла; |
|||
22
Fragster
гуру
14.12.17
✎
12:23
|
лишних строк практически нет
|
|||
23
Fragster
гуру
14.12.17
✎
12:23
|
(12) это сделано ради сжатия данных
|
|||
24
Fram
14.12.17
✎
12:24
|
(21) писать столько кода на каждый уровень вложенности считаю не очень нормальным
|
|||
25
Fram
14.12.17
✎
12:25
|
(24) + а в моем случае объект был очень сложным по структуре
|
|||
26
Fragster
гуру
14.12.17
✎
12:26
|
(24) ну, можно написать функцию из 3 (трёх, карл!) строк, которая создаст весь объект со всеми свойствами
|
|||
27
Fram
14.12.17
✎
12:31
|
(26) подход в (5) проще. собственно, следующая версия, используемого мной вебсервиса, уже реализовывала уже такой подход.
|
|||
28
Fragster
гуру
14.12.17
✎
12:34
|
(27) тогда отказывайтесь от soap вообще, тем более, что оверхэд там реально большой относительно http, где-то +25%
|
|||
29
Fragster
гуру
14.12.17
✎
12:36
|
вся сила - в формализации. Не все, к сожалению, понимают, что статическая типизация - путь к избавлению от кучи "детских" ошибок (опечаток, и т.п.). Вон, даже от жаваскрипта в тайпскрипт переходят.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |