|   |   | 
| 
 | Ответ от 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) там вроде есть отладка, когда публикуешь веб-сервис, ставишь галку отладка и параметры задаешь. И потом прямо идешь отладчиком и попадаешь в веб сервис, смотришь все поля.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |