|   |   | 
| 
 | 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> но вообще этот вопрос - скорее к разработчику сервиса. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |