Вход | Регистрация


Web-Сервисы и WSDL

Web-Сервисы и WSDL
Я
   anchar007
 
02.11.18 - 16:52
Помогите понять что не так с получением структуры wsdl через 1С:
Есть ссылка на wsdl описание веб-сервиса. На её основании создаю объект WS-ссылку. Создается вот такой объект:
https://pp.userapi.com/c850420/v850420209/36471/nByf3_rOWl0.jpg

Т.е. 1С загрузила структуру, в которой есть операция ping, у неё есть входной параметр data типа "String"

Теперь смотрю WSDL описание:

 <wsdl:operation name="ping">
            <wsdl:input message="tns:pingRequest"/>
            <wsdl:output message="tns:pingResponse"/>
            <wsdl:fault name="fault" message="tns:pingFault"/>
 </wsdl:operation> 

У операции ping на входе структура PingRequest:

            <xsd:complexType name="PingRequest">
                <xsd:complexContent>
                    <xsd:extension base="tns:BaseRequest">
                        <xsd:sequence>
                            <xsd:element name="data" type="xsd:string"/>
                        </xsd:sequence>
                    </xsd:extension>
                </xsd:complexContent>
            </xsd:complexType>

BaseRequest:

            <xsd:complexType name="BaseRequest" abstract="true">
                <xsd:sequence>
                    <xsd:element name="credentials" type="tns:Credentials"/>
                    <xsd:element name="language">
                        <xsd:simpleType>
                            <xsd:restriction base="xsd:string">
                                <xsd:enumeration value="ru"/>
                                <xsd:enumeration value="en"/>
                            </xsd:restriction>
                        </xsd:simpleType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
 
Дак вот 1С создает на основании WSDL операцию ping с входным параметром data, а в этот data можно передать credentials и language. Вот запрос, который формирует 1С:
https://pp.userapi.com/c850420/v850420110/389ee/JuTCrfywJmM.jpg

Но этот запрос не может разобрать та система, к которой отправляется запрос, т.к. она не понимает что такое data. Во всём, кроме 1С запрос формируется так, что параметр data находится на одном уровне с credentials и language. Вот пример из SOAP UI:
https://pp.userapi.com/c850420/v850420110/389d4/VNY5XVe_ZT8.jpg

Что не так с 1С? Почему она подставляет credentials и language в data? Хотя, например SOAP UI на основе того же wsdl описания создает другой запрос?
 
 
   Fragster
 
1 - 02.11.18 - 17:22
не вижу тут кода 1с, который "создает на основании WSDL операцию ping с входным параметром data, а в этот data можно передать credentials и language"
   anchar007
 
2 - 04.11.18 - 11:56
(1) потому что я просто создаю объект конфигурации WS-ссылка. Т.е. просто указываю ссылку на WSDL, а 1С уже сама создает структуру как на первом скрине: https://pp.userapi.com/c850420/v850420209/36471/nByf3_rOWl0.jpg
   Fragster
 
3 - 04.11.18 - 12:00
(2) ну так структура правильная. а вот 
> подставляет credentials и language в data
- это странно и мне хочется увидеть код, которым это получается.
   anchar007
 
4 - 08.11.18 - 10:56
В общем описание проблемы можно прочитать тут: http://1centerprise8.blogspot.com/2015/04/web-service-din-ssylka.html

"К сожалению, платформа 1С во всем объеме не поддерживает работу с Web-сервисами средствами встроенного языка, например, задать значения атрибутов lang, options, format для входящего сообщения операции checkText() становится невозможным, так как нам дозволено только передавать параметры операции"

В моем случае параметр операции - data и 1С всё пихает в него. Входной параметр можно определить из WSСсылки, если её добавить в дерево конфигурации (https://pp.userapi.com/c850420/v850420209/36471/nByf3_rOWl0.jpg).

Вроде 3 года прошло с публикации статьи, а ничего в 1С не изменилось
   Fragster
 
5 - 08.11.18 - 11:04
(4) ты очень плохо объясняешь. в твоем случае 1с сама ничего не пихает, а пихаешь ты.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует