Имя: Пароль:
1C
1С v8
Веб сервисы, параметры и хмл запроса
,
0 Leeroy
 
13.08.14
12:02
Всем привет.
Пытаюсь наладить обмен со сторонним приложением через ВС. Есть несколько методов на нём, в одних требуются входящие параметры, в других нет. Обращение к методам, которые не требуют параметров, проходит правильно. Обращение к методам, которые требуют параметры, встает непосредственно на строке вызова метода с ошибкой "Недостаточно фактических параметров".

Код обращения к методу:

Определение = Новый WSОпределения("ПолныйАдресВС?WSDL");
Прокси = Новый WSПрокси(Определение, "ПространствоИмен", "ИмяСервиса", "ИмяСервисаSoap");
ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("ПространствоИмен").Получить("GetAgreementsList1C");
WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр = "400383";
НаборДанных = Прокси.GetAgreementsList1C(WSПараметр);

Все имена веб сервиса заменены мною.

На браузерных соап клиентах методы отрабатывают нормально с параметрами. Тип параметров - строка.

Сталкивался кто-нибудь с подобной проблемой? Как решали?
Также пришла в голову идея посмотреть, какой запрос 1С пытается передать методу, но не могу понять, как мне сформировать хмл запроса с параметрами. Есть идеи?
1 sda553
 
13.08.14
12:06
сравни соап пакет от 1с и от другого клиента любым http снффером
2 Leeroy
 
14.08.14
11:48
Попробовал вайршарком перехватить пакеты. Выяснилось, что при попытке обращения к методу с параметрами, по факту обращения из 1С не происходит, то есть не видит вайршарк ничего. Попробовал тем же кодом обратиться к веб сервису цб по получению курсов валют с параметром из текущей даты - отработал нормально, вайршарк всё спалил. При обращении к методу вс без параметров, обращение происходит нормально, пакет в вайршарк попадает.
3 Господин ПЖ
 
14.08.14
11:55
1с какую-то отсебатину сует, не все сервисы в состоянии это переварить. и сделать ничего нельзя- хоть на колени становись. пишут обертки обрабатывающие послания от 1с
4 Господин ПЖ
 
14.08.14
11:55
мопед не мой
5 Господин ПЖ
 
14.08.14
11:58
если в проект c# запихать reference на WSDL он сам создает обвязку - классы с полями и прочие кишки - можно посмотреть свойства и типы, может у тебя по фасету параметры не проходят или пространство имен некорректное?
6 Leeroy
 
14.08.14
11:59
Да вот в том то и проблема, что, если я правильно понимаю, 1С даже сунуть методу не может ничего, так как вайршарк не перехватывает. То есть обрывается с ошибкой на этой строке

НаборДанных = Прокси.GetAgreementsList1C(WSПараметр);

без обращения по хттп..
Если бы сувала - то хоть что-то было бы ясно.
7 Господин ПЖ
 
14.08.14
12:01
(6) может права не те... от кого 1с крутится - localservice про сеть вообще не в курсе
8 Apokalipsec
 
14.08.14
12:03
Там точно один параметр должен быть? Так-то ошибка чисто 1Сная, что функция вызываешь, которая ждет два параметра, а передаешь один.
9 Leeroy
 
14.08.14
12:03
Фасет один у всех - сохранять пробельные символы. Не думаю, что в этом проблема.
Пространство имён некорректное? Да, вроде, корректное. Остальное то норм отрабатывает. Хотя мутное оно какое-то. Сейчас поковыряю его.

Не, права я думаю тоже не то. Не на всех же методах стопорится - некоторые норм отрабатывают.
10 Leeroy
 
14.08.14
12:08
(8) Ну как сказать. 4 параметра там, все строки, выглядит это вот так:

WSПараметр.sID = "400383";
WSПараметр.sTypeSearch = "2";
WSПараметр.sd1 = "2014-08-04";
WSПараметр.sd2 = "2014-08-07";

Метод ждёт либо ИД, либо три остальных. При условии заполнения всех, приоритет отдаётся ИД.
11 Apokalipsec
 
14.08.14
12:11
(10) А если попробовать соответственно: НаборДанных = Прокси.GetAgreementsList1C(WSПараметр, , , );
12 Leeroy
 
14.08.14
12:12
(11) Хм..не исключено. Сейчас попробуем )
13 Leeroy
 
14.08.14
12:15
Уже ближе. На этой же строке выдало ошибку, но хотя бы, произошло обращение к методу, вайршарк словил пакет. Ошибка такая:

Неизвестная ошибка. Ошибка разбора XML:  - [1,1]
Фатальная ошибка:
Extra content at the end of the document

по причине:
Ошибка разбора XML:  - [1,1]
Фатальная ошибка:
Extra content at the end of the document
14 Leeroy
 
14.08.14
12:17
Сейчас попробую по отдельности передать параметры, не одним.
15 Serginio1
 
14.08.14
12:22
Тогда уж

WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра,"400383");
16 Leeroy
 
14.08.14
12:22
Блин. Я, конечно, не спец, но не должно же так быть..
В итоге с метода пришёл ответ на такую конструкцию:

НаборДанных = Прокси.GetAgreementsList1C(WSПараметр.sID,,,);

Соответственно три остальных встают тоже по местам. Ответ пустой пришёл, но это уже не так критично, может данные там почистили. Сейчас буду играться дальше. Спасибо, Apokalipsec )
17 Leeroy
 
14.08.14
12:26
(15) Там в нём 4 значения, в (0) я просто лишние строки обрезал, поэтому немного несуразно вышло )
18 Serginio1
 
14.08.14
12:30
19 Leeroy
 
14.08.14
12:45
В итоге рабочий вариант оказался в (16).

(18) Спасибо, посмотрю )
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс