Имя: Пароль:
1C
 
Web-Сервисы и WSDL
0 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 описания создает другой запрос?
1 Fragster
 
гуру
02.11.18
17:22
не вижу тут кода 1с, который "создает на основании WSDL операцию ping с входным параметром data, а в этот data можно передать credentials и language"
2 anchar007
 
04.11.18
11:56
(1) потому что я просто создаю объект конфигурации WS-ссылка. Т.е. просто указываю ссылку на WSDL, а 1С уже сама создает структуру как на первом скрине: https://pp.userapi.com/c850420/v850420209/36471/nByf3_rOWl0.jpg
3 Fragster
 
гуру
04.11.18
12:00
(2) ну так структура правильная. а вот
> подставляет credentials и language в data
- это странно и мне хочется увидеть код, которым это получается.
4 anchar007
 
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С не изменилось
5 Fragster
 
гуру
08.11.18
11:04
(4) ты очень плохо объясняешь. в твоем случае 1с сама ничего не пихает, а пихаешь ты.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс