|
Веб сервисы, параметры и хмл запроса | ☑ | ||
---|---|---|---|---|
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) Спасибо, посмотрю ) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |