Имя: Пароль:
1C
 
Web-сервис, Получение ответа
0 Honesty
 
25.08.10
13:53
Следующий код работает (спасибо этому форуму, почитал темы, разобрался), связался с разработчиком, они ответили что их сервер возвращает ответ.
Вопрос в том как мне этот ответ обработать, подскажите хотябы в какую сторону копать, насколько я понимаю нужно описать получаемый ответ, в моем случае именно ответ возвразает ошибку (внизу поста), хотя сервер возвращает мне ответ, т.е. наеврное эта ошибка "Ошибка вызова операции сервиса: {http://comarch.pl/loyalty/web/ws/clm}:iLPService:CheckBalance()" не совсем актуальна

Код в 1С
Код
лОпределения = новый WSОпределения("http://kabinet.lokal.lviv.ua/ewebservice/services/iLP2?wsdl", СокрЛП(Пользователь), СокрЛП(Пароль));
   СервисWS = новый WSПрокси(лОпределения, "http://comarch.pl/loyalty/web/ws/clm", "iLPService", "iLP2");
   URI = "http://comarch.pl/loyalty/web/ws/clm";
   СервисWS.Пользователь = СокрЛП(Пользователь)+"";
   СервисWS.Пароль = СокрЛП(Пароль);
   
   //Для отправки пакета
   ТипОбъектаXDTOСоздаваемого = СервисWS.ФабрикаXDTO.Тип(URI,"CheckBalanceData");
   ТипОбъектаXDTOСоздаваемогоКонтекст = СервисWS.ФабрикаXDTO.Тип(URI,"ContextData");
   
   НовыйОбъектXDTO = СервисWS.ФабрикаXDTO.Создать(ТипОбъектаXDTOСоздаваемого,);
   
   СтрокаКонтекст                                = СервисWS.ФабрикаXDTO.Создать(ТипОбъектаXDTOСоздаваемогоКонтекст,);
   СтрокаКонтекст.partnerCode                    = "DEF";
   СтрокаКонтекст.locationCode                 = "TS01";
   СтрокаКонтекст.token                             = "";
   СтрокаКонтекст.CardNo                            = "0999998";
   СтрокаКонтекст.TransactionDate                 = Формат(ТекВремя,"ДФ=YYMMddhhmmss");
   НовыйОбъектXDTO.context = СтрокаКонтекст;

   НовыйОбъектXDTO.type = "B";
   
   Ответ = СервисWS.CheckBalance(НовыйОбъектXDTO);


Ответ который я получаю от сервера (пример из документации)
Код
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>

       <CheckBalanceResponse xmlns="http://comarch.pl/loyalty/web/ws/clm">

           <Response xmlns="">
               <errorCode>0</errorCode>
               <repeatFlag>false</repeatFlag>

               <processingDate>100813111118</processingDate>
               <points>0</points>
               <balance>310</balance>

               <messageType>1</messageType>
               <online>true</online>

           </Response>
       </CheckBalanceResponse>
   </soapenv:Body>
</soapenv:Envelope>


Ошибка
{Обработка.Обработка1.Форма.Форма(36)}: Ошибка при вызове метода контекста (CheckBalance): Ошибка вызова операции сервиса: {http://comarch.pl/loyalty/web/ws/clm}:iLPService:CheckBalance()
Возврат СервисWS.CheckBalance(НовыйОбъектXDTO);
по причине:
Ошибка вызова операции сервиса: {http://comarch.pl/loyalty/web/ws/clm}:iLPService:CheckBalance()
по причине:
Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://comarch.pl/loyalty/web/ws/clm}ResponseData - [1,325]
Проверка дополнительного свойства:
форма: Элемент
имя: errorCode
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://comarch.pl/loyalty/web/ws/clm}ResponseData - [1,325]
Проверка дополнительного свойства:
форма: Элемент
имя: errorCode
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://comarch.pl/loyalty/web/ws/clm}ResponseData
1 Honesty
 
26.08.10
18:06
up
2 Honesty
 
27.08.10
17:00
Помогите, пожалуйста =/
3 DmitrO
 
27.08.10
17:11
написано же: Структура объекта не соответствует типу
значение в элементе errorCode наверно не того типа.
надо проверить по схеме: описание элемента ResponseData, как там описан элемент errorCode какой указан тип и соответствует ли он значению возвращаемому в элементе errorCode.
4 sash-ml
 
27.08.10
17:30
wsdlку в студию
5 Honesty
 
27.08.10
18:42
А не проблемма ли что в возвращаемом объекте нет описания типа? <Response xmlns="">

errorCode - тип int (http://www.w3.org/2001/XMLSchema)
<errorCode>0</errorCode>

wsdlку, сорри не совсем понимаю что нужно? )) сам ничего подобного не использовал )
6 sash-ml
 
27.08.10
18:49
WSDL это XML который выдает тебе ссылка
http://kabinet.lokal.lviv.ua/ewebservice/services/iLP2?wsdl

Или скажи имя/пароль к сервису чтоб посмотреть что он там выдает.
7 Honesty
 
27.08.10
18:55
(6) Стукни плиз в аську - 190171417, дам юзвера и пасс
8 Honesty
 
27.08.10
19:20
9 sash-ml
 
27.08.10
22:20
в конфигураторе добавляеш в Общие\WS-Ссылки новую ссылку и в нее кидаеш путь http://kabinet.lokal.lviv.ua/ewebservice/services/iLP2?wsdl
открываеш то что получилось и видиш что возращаемое значение содержит тип ResponseData (http://comarch.pl/loyalty/web/ws/clm)

отсюда следует что "ответ" нужно инициализировать вроде:
ТипОтветаXDTOСоздаваемого = СервисWS.ФабрикаXDTO.Тип(URI,"ResponseData");
Ответ = СервисWS.ФабрикаXDTO.Создать(ТипОтветаXDTOСоздаваемого ,);
...
...
Ответ = СервисWS.CheckBalance(НовыйОбъектXDTO);
10 Honesty
 
28.08.10
07:05
отсюда следует что "ответ" нужно инициализировать вроде:


ТипОтветаXDTOСоздаваемого = СервисWS.ФабрикаXDTO.Тип(URI,"ResponseData");
Ответ = СервисWS.ФабрикаXDTO.Создать(ТипОтветаXDTOСоздаваемого ,);
...
...
Ответ = СервисWS.CheckBalance(НовыйОбъектXDTO);

Делал так, никаких результатов
Закон Брукера: Даже маленькая практика стоит большой теории.