Имя: Пароль:
1C
1С v8
Ответ от web-сервиса (WSDL/SOAP/XDTO)
, , ,
0 MagaDann
 
16.05.16
11:30
Впервые пользуюсь этим объектом и вообще таким обменом.
Как получить ответ от веб-сервиса, если у него есть только процедура отправки (которая, конечно, ничего не возвращает)?
Я создаю описание фабрики, все прокси и SSL подключаются отлично, вот этот кусок отрабатывает без ошибок:

Прокси = Новый WSПрокси(Новый WSОпределения(WSDL.Адрес), WSDL.Пространство, WSDL.Сервис, WSDL.Порт);
WSПараметр = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Пакеты.Получить(WSDL.Пространство2).Получить(WSDL.ПараметрПередачи));
<..заполнение объекта...>
Прокси.ПроцедураОтправки(WSПараметр);

Но админ веб-сервиса (сторонний) утверждает, что ничего у него не загружалось.
Говорит, получи сначала ответ "200" или ответ "500", а потом посмотрим.
Можно вообще получить ответ?
1 hhhh
 
16.05.16
12:07
вроде там не нужно так глобально, создавать фабрики. Параметры и типы можно вытащить из ws-ссылки.
2 Cyberhawk
 
16.05.16
12:09
Для таких случаев (проверить коннект) по правилам хорошего тован реализуют веб-сервис Hello(), возвращающий какую-нибудь строку типа "Success"
3 Cyberhawk
 
16.05.16
12:10
*тона
4 MagaDann
 
16.05.16
12:14
(1) делаю на лету, без ws-ссылки, но это не важно.
(2) т.е. таки заставить веб-админа запилить функцию?
5 Cyberhawk
 
16.05.16
12:24
(4) Ну если есть возможность "заставить" (попросить), то попроси. Пусть будет какой-нибудь веб-сервис без параметров. Тогда сможешь _быстро_ проверить доступность не только через 1С, но и из SoapUI.
Но вообще тебе в данном случае это вряд ли поможет, ибо неясно, что такое "ничего у него не загружалось" (куда?) и как это связано с передачей параметра в веб-сервис
6 MagaDann
 
16.05.16
12:39
(5) ну, процедура называется типа "ОтправкаДанных", в параметре массив, по идее, сервис должен принять этот массив
7 Cyberhawk
 
16.05.16
12:40
(6) Кинь ссылку на WSDL-описание
8 MagaDann
 
16.05.16
13:32
9 Cyberhawk
 
16.05.16
13:45
(8) А почемы ты вызываешь метод "ПроцедураОтправки"? Его нет в WSDL-описании...
Покажи полностью рабочий код, начиная от получения WSDL-определения из WSDL-файла и заканчивая вызовом метода веб-сервиса, без вырезания кусков кода и замены кусков кода
10 MagaDann
 
16.05.16
14:03
(9) в ПолучитьОбъекты() просто выборка по запросу с теми же полями.
мПрокси    = Новый ИнтернетПрокси();
мПрокси.Установить(Объект.ПроксиТип, Объект.ПроксиАдрес, Объект.ПроксиПорт);
мSSL    = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
Для Каждого WSDL Из Объект.СписокWSDL Цикл
    Прокси    = Новый WSПрокси(Новый WSОпределения(WSDL.Адрес,,,,,мSSL), "http://localhost/Item";, "WebServiceService", "WebServicePort", мПрокси);
    ТипWSПараметра0    = Прокси.ФабрикаXDTO.Пакеты.Получить("http://www.mysite.com/xml/Item").Получить("ListOfItemTopElmt";);
    WSПараметр0    = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра0);
    ТипWSПараметра    = Прокси.ФабрикаXDTO.Пакеты.Получить("http://www.mysite.com/xml/Item").Получить("ListOfItem";);
    WSПараметр    = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    Выборка    = ПолучитьОбъекты();
    Пока Выборка.Следующий() Цикл
        ТипWSПараметра1    = Прокси.ФабрикаXDTO.Пакеты.Получить("http://www.mysite.com/xml/Item").Получить("Site";);
        WSПараметр1    = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра1);
        ЗаполнитьЗначенияСвойств(WSПараметр1, Выборка);
        WSПараметр["Site"].Добавить(WSПараметр1);
    КонецЦикла;
    WSПараметр0["ListOfItem"] = WSПараметр;
    Прокси.Data_Outbound(WSПараметр0);
КонецЦикла;
11 Cyberhawk
 
16.05.16
14:06
В отладчике уже смотрел, что структура полей WSПараметр0 и WSПараметр совпадает с требуемой (в WSDL-файле там в итоге заворачиваются структуры из двух строковых реквизитов)?
12 Serginio1
 
16.05.16
14:17
Фиддлером посмотри что возвращается
13 MagaDann
 
16.05.16
14:22
(11) https://goo.gl/crb6OX
Вот тут, кстати, вопрос.
Параметр имеет тип "ListOfItemTopElmt", который в свою очередь заполняется параметром "ListOfItem", но там указан не "тип", а "ссылка".
При этом WSПараметр0["ListOfItem"] = WSПараметр нормально заполняется.
14 MagaDann
 
17.05.16
09:26
Сделали мне функцию вместо процедуры, возвращает, кажется, 504 ошибку, "Истекло время ожидания шлюза"...
15 Serginio1
 
17.05.16
09:50
А зачем такие сложности. У каждого параметра есть Тип.
Фабрика=Прокси.ФабрикаXDTO;
ТипПараметра=Фабрика.Тип(ПространствоИмен,ИмяТипа);

И короче и понятнее
16 Serginio1
 
17.05.16
09:51
В твоем случае
ТипWSПараметра0    = Фабрика.Тип("http://www.mysite.com/xml/Item","ListOfItemTopElmt";);
17 Serginio1
 
17.05.16
09:55
Попробуй скачать WSDL и ссохранить его на диск
ОпределениеТ=Новый WSОпределения(ПутьК_wsdl);

    WSСервис=ОпределениеТ.Сервисы[0];
    ПроксиWS=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя,,,Новый ЗащищенноеСоединениеOpenSSL());
18 MagaDann
 
17.05.16
11:15
Заметил косяк...
WSDL у меня на https, а если посмотреть точку подключения, то там http.
Как сделать так, чтобы в точку подключения попал https?
Свойство ТочкаПодключения только для чтения.
Сетевой прокси делаю на 443.
19 Serginio1
 
17.05.16
12:07
(18) Если нужен https то измени путь в WSDL
soap:address location

Ну и проконсультируйся с разработчиками.
Если http то и параметр защищенное соединение не нужно
20 MagaDann
 
17.05.16
17:43
(19) Да, поменяли на https в WSDL.

Но ещё и поменяли процедуру, теперь есть выходной параметр statuscode
string (http://www.w3.org/2001/XMLSchema)

Его как сделать?
statuscode = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string");
Так?
21 Serginio1
 
17.05.16
22:24
Если тип простой (строка,число, дата) то можно просто указать строку.
Если сложный или AnyType то нужно через
ТипСтрока = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string");
statuscode=Фабрика.Создать(ТипСтрока ,Значениеstatuscode);

Все Out параметры должны идти последними в методе
22 hhhh
 
18.05.16
06:30
(20) там вроде есть отладка, когда публикуешь веб-сервис, ставишь галку отладка и параметры задаешь. И потом прямо идешь отладчиком и попадаешь в веб сервис, смотришь все поля.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.