|
WEB - сервис стороннего приложения. В тупике. Ошибка при вызове метода. | ☑ | ||
---|---|---|---|---|
0
new_hope
09.04.20
✎
18:55
|
Имею работающий Веб сервис. Все работает, данные получаю. Вернее получал до сегодняшнего дня.
Делал запросы - получал данные и все было хорошо. Данные, которые я получал были в таблице, поля которой были исключительно примитивных типов (Строки, числа) Появился на ресурсе новый метод, мне его нужно использовать и получать данные, но в таблице (ответе) появился тип (не примитивный), как я понимаю, ссылка на другую таблицу (или строку другой таблицы с данными). И все. При запросе получаю ошибку: http://i.piccy.info/i9/3ce5f37aa06c1bdd4178664e75d5eca2/1586446965/16763/1372020/Oshybka.png Код: http://i.piccy.info/i9/dfa68d23bc7a7c0dc3adc2235febe528/1586446560/24219/1372020/Kod.png ВС_Ссылка http://i.piccy.info/i9/8c66be63a64ad07501d02f86616524c9/1586447616/8452/1372020/WS_Link.png Описание типов?: http://i.piccy.info/i9/18d60f474d77935ea16a67a37dccaa3a/1586447699/14998/1372020/OpysanyeTypov.png и сама "подчиненная" таблица: http://i.piccy.info/i9/b5410fa5ecf873d50d5ba1ecd04ce915/1586447763/7558/1372020/Opysanye_tablytsy_etoi_ssylky.png Постарался как смог описать свою проблему. Не пойму, как получить в 1С данные. Например - программой SoapUI я получаю данные. |
|||
1
new_hope
09.04.20
✎
19:06
|
То-есть оно пишет ошибку, что не может типа проверить это "дополнительное" свойство (то-есть это поле, которое не примитивное а является явно другой таблицей...) Как это все увязать?
Хотябы пример какойто похожий? |
|||
2
acht
09.04.20
✎
19:08
|
вссылку обнови
|
|||
3
new_hope
09.04.20
✎
19:09
|
(2) та это сделано в самую первую очередь... Или ее нужно динамически обновлять при каждом запросе? (я ее в конфигураторе тока обновил)
|
|||
4
NorthWind
09.04.20
✎
19:24
|
Может, поднять фиддлер и посмотреть что реально приходит, а потом сравнить это со схемой? Если метод свежевнедренный, то не исключены и ошибки разработчиков сервиса...
|
|||
5
new_hope
09.04.20
✎
19:25
|
(4) А что такое Фиддлер? Можно чуть поподробнее, по этому моменту?
|
|||
6
new_hope
09.04.20
✎
19:26
|
(4) Понял... прокси отладочный... ну это также для меня новое поле знаний
|
|||
7
NorthWind
09.04.20
✎
19:27
|
(5) это такая штука, которая перехватывает веб-трафик (wininet.dll) и показывает его. Веб-отладчик. Можно смотреть что вы отправляете на сервис и получаете с него
|
|||
8
Cyberhawk
09.04.20
✎
19:34
|
Так у тебя в ответе походу приходит не то содержимое, что ожидается
|
|||
9
new_hope
09.04.20
✎
19:41
|
(8) нууу... наверное да... Но вот программой SoapUI которой меня ткнули носом - данные получает - она отрабатывает и какие то данные приходят... типа "на все работает"
А в 1С? С точки зрения кода и запроса все ок? рядом методы работают - но там тока примитивные типы. В методах, где есть кроме примитивных типов данных - вот то, что я указал - все. капут! |
|||
10
Cyberhawk
09.04.20
✎
19:42
|
Если дашь доступ к веб-сервису, то смогу посмотреть
|
|||
11
Garykom
гуру
09.04.20
✎
19:45
|
(0) >Появился на ресурсе новый метод
WSDL-схему перезагрузи и да могут быть приколы |
|||
12
new_hope
09.04.20
✎
20:01
|
(11) Уже. В конфигураторе
|
|||
13
new_hope
09.04.20
✎
20:02
|
Вот в сторонней программе запрос отрабатывает:
http://piccy.info/view3/13748209/7d6ad3d5935fb9963e5e7f129d19d63f/ |
|||
14
new_hope
09.04.20
✎
20:02
|
Короче - надо торбить разработчика, как я понял
|
|||
15
NorthWind
09.04.20
✎
20:10
|
(13) вы обратили внимание, что у вас в теге ACTS элементов меньше чем указано в схеме? D_ISSUE и ORDERS нет. Они ненароком не обязательные? По остальным нормально все - т.е. данные примерно соответствуют типам и фасетам?
|
|||
16
NorthWind
09.04.20
✎
20:13
|
дело не в том отрабатывает запрос или нет. Дело в том что вы XDTO-пакет для разбора ответа генерируете по схеме, но во-первых, в схеме не исключены мелкие косяки, во-вторых, составные элементы в SOAP могут представляться немножко по-разному и из-за этого разные клиентские библиотеки иногда лажаются. 1Cный XDTO не исключение.
|
|||
17
new_hope
09.04.20
✎
20:17
|
(15) Понял... а и вправду - нету в ответе "D_ISSUE и ORDERS".... Както странно
|
|||
18
NorthWind
09.04.20
✎
20:23
|
(17) на самом деле если они необязательные, то это влиять не должно. Надо проверить.
|
|||
19
new_hope
09.04.20
✎
20:26
|
(18) А как понять, обязательные они или нет? Это можно в описании wdsl увидеть?
|
|||
20
new_hope
09.04.20
✎
20:30
|
||||
21
new_hope
09.04.20
✎
20:35
|
А.... и может это.... версия 1С 8.3.10
|
|||
22
NorthWind
09.04.20
✎
20:53
|
(20) минимальное количество элементов D_ISSUE=1. Т.е. как минимум один должен быть. А у вас ни одного.
|
|||
23
NorthWind
09.04.20
✎
20:54
|
+ поменяйте на ноль и посмотрите что и как будет происходить
|
|||
24
NorthWind
09.04.20
✎
20:56
|
это я и имел в виду под "мелкими косяками". Элем описан как обязательный, но в продакшене ответ идет без него.
|
|||
25
Cyberhawk
10.04.20
✎
13:37
|
(20) Минимальное кол-во = 1, обязательное
|
|||
26
new_hope
10.04.20
✎
14:14
|
Еще вопрос - ответ от сервера - это данные в виде XML ?
|
|||
27
NorthWind
10.04.20
✎
14:16
|
(26) да, конечно. SOAP так и работает - запрос в виде XML, ответ тоже в виде XML.
|
|||
28
new_hope
10.04.20
✎
14:17
|
И и этот "ответ" (XML) 1С-ка преобразует в свой собственный объект XDTO.... Верно я понимаю?
|
|||
29
NorthWind
10.04.20
✎
14:19
|
(28) нет. Как я понимаю, сервер отправляет ответ, XDTО-пакет его проверяет на соответствие схеме (где у вас и происходит ошибка) и затем разбирает, разбрасывая данные по полям. После чего к ним можно обращаться из программы на 1С.
|
|||
30
NorthWind
10.04.20
✎
14:20
|
* сорри, неверно вашу реплику прочитал. Все верно.
|
|||
31
new_hope
10.04.20
✎
14:23
|
(25) Не меняя ничего они мне смоделировали набор данных (за один определенный деть) со всеми полями, которые есть и указаны. Всеравно ошибка.
|
|||
32
new_hope
10.04.20
✎
14:30
|
У меня поле "ORDERS" составного (не примитивного типа)... для таких полей нет никаких в 1С определенных специальных методов работы или получения данных?
Короче... уже всех задрал чувствую :-) пардон. |
|||
33
NorthWind
10.04.20
✎
14:49
|
(31) навскидку сказать сложно, нужно проводить эксперименты. Как вариант, можно "сыграть" наоборот - заполнить поля в XDTO-пакете и записать XML, и сравнить получившееся с тем что возвращается сервером. Тут и вылезет косяк.
|
|||
34
new_hope
10.04.20
✎
16:56
|
Маленький вопрос.. Это не может касаться моего Варианта (вычитал на просторах интернета, в том числе и на ИТС):
Типы делятся на простые (simple) и составные (complex). Составные типы могут иметь несколько моделей содержимого, но XDTO поддерживает только простые последовательности свойств - так называемые sequence. (Для контента сложных типов следует использовать только модель sequence - ИТС) Может быть проблема какраз в этом? |
|||
35
NorthWind
10.04.20
✎
18:44
|
(34) да, вполне может быть в этом.
|
|||
36
Сияющий в темноте
10.04.20
✎
23:20
|
можно через httpзапрос отправить запрос и разобрать ответ вручную,но это придется пеоеписывать при каждом изменении сервиса.
|
|||
37
Сияющий в темноте
10.04.20
✎
23:21
|
и можно спросить,если на той стороне сервис писали кодом,то лучше и на этой работать кодом,тогда странных ошибок будет меньше.
|
|||
38
H A D G E H O G s
10.04.20
✎
23:33
|
Тащить WSDL схему на каждый чих - такое себе.
Закешируйте его в tmp файл при первом обращении программы и обновляй при перезапуске 1С. |
|||
39
NorthWind
11.04.20
✎
08:17
|
(36) вот только пересмотрел я ответ (13) и не увидел там никакой зауми... Обычные вложенные элементы, чего XDTO не может там вычитать - на первый взгляд непонятно. Я бы все-таки внимательно посмотрел на пакет и элементы. Где-то что-то не соответствует скорее всего.
|
|||
40
new_hope
13.04.20
✎
14:53
|
(37) Кодом - это как...на этой стороне? Можно "работать" еще както совсем другим кодом?
На той стороне НЕ 1С |
|||
41
NorthWind
13.04.20
✎
19:31
|
(40) это понятно что не 1С. Серьезные нагруженные системы такого плана пишутся на Java обычно или еще на чем-то подобном.
Имеется в виду следующее: вмешаться в механизм разбора XDTO-пакета нельзя, он - вещь в себе. У него, например, нет процедур обработки событий, которые бы позволили подправить входящие узлы перед обработкой или сделать еще что-то подобное. Поэтому если возможности по подправке XSD/WSDL исчерпаны, то остается только разбирать ответы руками, что адски неприятно для серьезных сервисов, где таких пакетов может быть много. |
|||
42
NorthWind
13.04.20
✎
19:38
|
если вы уверены что у вас все хорошо со схемой - попробуйте платформу посвежее. Может, вам повезет и это ошибка платформы, которую со временем устранили.
|
|||
43
Serginio1
14.04.20
✎
13:48
|
Если вдруг не получится можно воспользоваться Использование классов .Net в 1С для новичков В свое время для таких случаев и писал
Не всегда сторонние схемы соответствует 1С Wsdl. Прелесть C# в том, что всегда можно для типа реализовать IXmlSerializable и ты сам будешь контролировать сериализацию. Ну или Скачать Wsdl и заменить тип на Any импортировать и уже самому программно разбирать объект XDTO |
|||
44
new_hope
14.04.20
✎
18:03
|
(42) Пробовал и на 16-й версии - все таже ошибка, к сожалению.
Как я понимаю, со стороны 1С уже ниначто не повлиять. осталось ждать совместимости со стороны разработчика сервиса. :-( |
|||
45
NorthWind
14.04.20
✎
18:32
|
(44) не видя xsd и не имея хотя бы 1-2 респонсов в виде текстовых файлов, трудно родить каких-либо идей кроме тех что уже были озвучены. Выложите - ну, можно будет попробовать выбрать время посмотреть.
|
|||
46
milan
14.04.20
✎
20:34
|
Плюнул в свое время , запрашиваю и разбираю ответы ручками.
|
|||
47
new_hope
15.04.20
✎
17:40
|
(46) можно пример как Вы это делаете?
|
|||
48
Serginio1
16.04.20
✎
14:05
|
||||
49
new_hope
17.04.20
✎
12:22
|
(46)
Получил информацию. Выкладываю XSD схему: https://mega.nz/file/0N1V1RqC#fKsFrc_cZDmsOWAUa2Nao_Wuc7yRHwzc8Em9u5BoIc8 И ответ сервера по запросу (xml файл): https://mega.nz/file/AN03TTbS#sP_fKiVQhO-OGhJrbqBbmKEhhnJc9_ZUtndsvfuseXM |
|||
50
NorthWind
17.04.20
✎
16:10
|
Уже вижу косяк. В XSD у вас
<xs:complexType name="OcInsOrderCompensationResponceDto"> <xs:sequence> <!-- Номер приказа на выплату --> <xs:element name="NUM_PO" type="xs:string" minOccurs="0" /> а в респонсе <ns2:ORDERS> <ns2:NUM>003/037/000012/20/1/1</ns2:NUM> т.е. номера обозваны по-разному. Если подправить в схеме NUM_PO на NUM и удалить из XML-файла SOAPовские обертки: ==Response_mista1.xml== <?xml version="1.0" encoding="UTF-8"?> <ns2:insCompensationCurrentInfo xmlns:ns2="http://othersoft.com/oc/schemas"> <ns2:UID>sc105960</ns2:UID> <ns2:D_CLAIM>2020-03-26</ns2:D_CLAIM> <ns2:EL_RISK>osago-damage</ns2:EL_RISK> <ns2:DECL>47800.0</ns2:DECL> <ns2:ACTS> <ns2:D_ISSUE>2020-03-27T00:00:00+02:00</ns2:D_ISSUE> <ns2:OBJ_UID>c2021330</ns2:OBJ_UID> <ns2:C_INSUR>7663</ns2:C_INSUR> <ns2:NUM>003/037/000012/20/1</ns2:NUM> <ns2:SUM_ACT>47800.0</ns2:SUM_ACT> <ns2:ORDERS> <ns2:NUM>003/037/000012/20/1/1</ns2:NUM> <ns2:SUM_RECEIPT>47800.0</ns2:SUM_RECEIPT> <ns2:CUSTOMER_S>Админченко Админ Админович</ns2:CUSTOMER_S> <ns2:OKPO>2883334290</ns2:OKPO> </ns2:ORDERS> </ns2:ACTS> </ns2:insCompensationCurrentInfo> тогда следующий код чОтвет = Новый ЧтениеXML (); чОтвет.ОткрытьФайл("D:\Response_mista1.xml"); Файл = ФабрикаXDTO.ПрочитатьXML(чОтвет, ФабрикаXDTO.Создать("http://othersoft.com/oc/schemas", "OcInsCompensationCurrentInfo").Тип()); грузит ваш файлик. |
|||
51
new_hope
17.04.20
✎
16:56
|
(50)ОГО - спасибо! Большое!
А по поводу "Соаповские" обертки - разработчики сервиса с ними тоже должны что-то подправить? |
|||
52
new_hope
17.04.20
✎
17:04
|
Кстати - в WDSL файле также "NUM_PO" ::-(
|
|||
53
new_hope
17.04.20
✎
18:06
|
Все это от собственного незнания.... В Программе SoapUI есть возможность автоматически проверять "Правильность" соответствия данных -> схеме этих данных.
Немножко изучив функционал и нажав кнопочку "Validate" в окне ответа (где результат с данными) получил следующее - четко написано, что ожидается элемент "NUM_PO" (В ответе "NUM") line 17: Expected elements 'NUM_PO@http://othersoft.com/oc/schemas SUM_RECEIPT@http://othersoft.com/oc/schemas CUSTOMER_S@http://othersoft.com/oc/schemas OKPO@http://othersoft.com/oc/schemas' instead of 'NUM@http://othersoft.com/oc/schemas' here in element ORDERS@http://othersoft.com/oc/schemas |
|||
54
NorthWind
17.04.20
✎
18:34
|
(51) > А по поводу "Соаповские" обертки - разработчики сервиса с ними тоже должны что-то подправить?
Думаю, что нет. Типы Envelope, Header, Body - служебные, они обрабатываются библиотекой SOAP-клиента, в схемах не указываются. А тип верхнего уровня OcConsolidatedCaseInfoListResponse, по-видимому, описан в WSDL. Все оставшееся нормально обрабатывается вашей схемой, если ее подправить. Если у вас есть контакт с разрабами - укажите им на ошибки. А если нет - исправьте сами ручками схему под данные да и пользуйтесь, пока не исправят. (53) так я ж вам еще неделю назад говорил - проверяйте схему и сравнивайте ее с ответом. У вас там не сотни атрибутов - с такими размерами схем безо всякого SOAPUI делается глазками за несколько минут. |
|||
55
NorthWind
17.04.20
✎
18:40
|
как вариант - можно вообще в схеме указать оба атрибута, как необязательные:
<xs:element name="NUM" type="xs:string" minOccurs="0" /> <xs:element name="NUM_PO" type="xs:string" minOccurs="0" /> и потом обработать программно встречаемость обоих из них. Т.е. по умолчанию берем NUM, а если его вдруг нет, то проверяем NUM_PO. В этом случае у вас программа не упадет, когда они исправят атрибут и ответ внезапно пойдет с NUM_PO вместо NUM. |
|||
56
new_hope
21.04.20
✎
09:58
|
(54) Приветствую! Супер . Спасибо.. вроде как почти понял темперь все необходимые нюансы
Тоесть, мне достаточно отредактировать WDSL файл в соответствии с ответом (данными), которые приходят в ответ от сервера? Это конечно просто, буду его в отредактированом виде использовать локально с диска. Но вот саму схему (xsd файл) мне его прислали, обственно на сам файл и его расположение как повлиять или достаточно WDSL? |
|||
57
new_hope
21.04.20
✎
10:39
|
(54) У меня все получилось! Спасибо всем огромное! Банальная невнимательность разработчика сервиса!
|
|||
58
NorthWind
21.04.20
✎
13:11
|
(56) когда вы создаете WS-ссылку в конфигурации, вы импортируете WSDL. Также вы импортируете XSD, когда создаете XDTO-пакеты. Раз вы проимпортировали - вы фиксируете то состояние, в котором оно пребывает на момент, например когда вы скачали его у разработчика и подправили под свои нужды. Если у разработчика сервиса что-то поменяется, то придется еще раз это все проделать и еще раз передать вашу конфу пользователям - обновить там или еще как-то.
Как я понимаю, в норме разработчик сервиса должен обеспечить такие XSD и WSDL, которые позволяют все нормально импортировать куда угодно - в дельфю, в 1С, в С# и т.д. Но на практике все не так просто - есть немного различающиеся механизмы представления сложных объектов в XML, разные библиотеки web-клиентов могут по-разному это все разбирать, что-то они могут уметь, а что-то не уметь (привет, XDTO), в некоторых языках может быть даже конфликт атрибутов с зарезервированными словами. Кроме того, разработчики сервисов, как в вашем случае, могут косячить, это не редкость, и крайне долго и неохотно исправлять свои косяки. Короче, править иногда приходится. Это практически норма. |
|||
59
new_hope
21.04.20
✎
14:09
|
(58) Да, по поводу XSD файла... я его, фактически, только посмотрел! А внес изменения только в файл wdsl (согласно с XML фалом данных, которые отвечает сервер, что-бы все "совпадало") поместил файл локально и импортировал его в конфигурацию. И все сразу заработало без ошибок.
Это я к чему - к тому, что я так и не ПОНЯЛ, какую функцию несет тот XSD файл для 1C (ведь в нем осталосьвсе поля без изменений на стороне сервиса), оказалось, что достаточно только правильного WDSL файла и все. |
|||
60
NorthWind
21.04.20
✎
14:15
|
(59) в wsdl-файле может быть вот так:
<wsdl:types> <xs:schema> <xs:import namespace="http://api.vetrf.ru/schema/cdm/application/ws-definitions" schemaLocation="application_ws_definitions_v2.0.xsd"/> <xs:import namespace="http://api.vetrf.ru/schema/cdm/base/ws-definitions" schemaLocation="base_ws_definitions_v2.0.xsd"/> </xs:schema> </wsdl:types> но вообще этот вопрос - скорее к разработчику сервиса. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |