Имя: Пароль:
1C
1С v8
Возврат из web-сервиса не примитивного значения
0 Strong_Gale
 
26.10.17
15:59
Доброго времени суток.
Описан XDTO пакет, в нем описан тип объекта
<xs:complexType name="FindOrder">
<xs:sequence>
<xs:element name="IsFind" type="xs:boolean"/>
<xs:element name="Year" type="xs:string"/>
<xs:element name="Number" type="xs:string"/>
<xs:element name="Total" type="xs:int"/>
<xs:element name="UUID" type="xs:string"/>
</xs:sequence>
</xs:complexType>

Есть web-сервис и функция, у которой стоит этот тип в качестве возвращаемого значения.

В функции есть инициализация и возвращение значения.

ДокументЗаказТип = ФабрикаXDTO.Тип("myURI", "FindOrder");
ДокументЗаказ = ФабрикаXDTO.Создать(ДокументЗаказТип);

...

ДокументЗаказ.IsFind = 1;
ДокументЗаказ.Year = СокрЛП(Year);
ДокументЗаказ.Number = СокрЛП(OrderNum);
ДокументЗаказ.Total = ВыборкаДокумента.СуммаДокумента;
ДокументЗаказ.UUID = Строка(ВыборкаДокумента.Ссылка.УникальныйИдентификатор());

Возврат ДокументЗаказ;

При вызове этой функции из скрипта php получаю:
Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: Violation of encoding rules in

Ошибка появляется в момент после того как функция отработает, в отладке до возврата все хорошо.

Подозреваю, что проблема в национальных кодировках, но их нет в возвращаемом значении, была мысль на запятую в разделители double, ушел на int.

Подскажите, что я делаю не так, куда копать?
1 Strong_Gale
 
26.10.17
16:13
Пока проблема решилась отключение кэша в php

ini_set('soap.wsdl_cache_enabled', 0 );
ini_set('soap.wsdl_cache_ttl', 0);
2 Strong_Gale
 
26.10.17
17:13
Возникло еще одна проблема - интересное поведение.
Изменил пакет XDTO
<xs:complexType name="FindOrder">
<xs:sequence>
<xs:element name="IsFind" type="xs:boolean"/>
<xs:element name="HavePay" type="xs:boolean"/>
<xs:element name="Year" type="xs:string"/>
<xs:element name="Number" type="xs:string"/>
<xs:element name="Total" type="xs:double"/>
<xs:element name="UUID" type="xs:string"/>
</xs:sequence>
</xs:complexType>

Добавил поле, заполняю его в функции, все прекрасно работает.

Пишу еще одну функцию в этом web-сервисе. Предыдущую не трогаю, пакет тоже. После применения изменений добавленное поле из wsdl пропадает и функция (предыдущая) валиться с ошибкой.

Поле присутствует в пакете XDTO, но в объекте ДокументЗаказ отсутствует

ДокументЗаказТип = ФабрикаXDTO.Тип("myURI", "FindOrder");
ДокументЗаказ = ФабрикаXDTO.Создать(ДокументЗаказТип);

Изменяю имя поля (добавляю и убираю пробела), применяю изменения - все появляется.

В чем проблема может быть?
3 DrShad
 
26.10.17
17:31
забудь про XDTO
4 Nolan
 
26.10.17
17:40
(3) альтернатива какая?
5 DrShad
 
26.10.17
17:57
(4) да хоть JSON
6 lodger
 
26.10.17
17:59
(5) в 8.1 тоже?
7 Филиал-msk
 
26.10.17
18:28
(6) Да хоть в 7.7
8 Филиал-msk
 
26.10.17
18:31
(0) У тебя проблема не на стороне 1С, а на стороне твоего просмотрщика. Бери сначала какой-нибудь некэширующий SOAPUI, ограничивай в публикации время жизни сессии в пуле коннектов 1С 1 секундой, чтобы гарантировано все рвалось и обтестируйся.
А потом уже пыха своего крути
9 Strong_Gale
 
26.10.17
22:51
(6) с сессией и кэшэм wsdl я разобрался, понятно, мне не понятна ситуация в (2). Т.е. в конфигурации описан тип XDTO, по нему создается объект и в объекте нет свойства, описаного в типе XDTO
10 Strong_Gale
 
26.10.17
22:52
(8) с сессией и кэшэм wsdl я разобрался, понятно, мне не понятна ситуация в (2). Т.е. в конфигурации описан тип XDTO, по нему создается объект и в объекте нет свойства, описаного в типе XDTO
11 Филиал-msk
 
26.10.17
23:02
Судя по дублям сообщений у тебя что-то с клавиатурой.
12 DrShad
 
27.10.17
08:00
(6) да легко
13 rphosts
 
27.10.17
08:09
(11)эьто не дубль, чел не умеет писать кратко, например так (9) к (8)