Выгрузить данные XML на веб сервис, используя WS ссылку

1. 19.09.22 15:05 Сейчас в теме
Добрый день. Подскажите,пожалуйста, можно ли отправить данные XML (XDTO) на веб сервис по WS ссылке? Я нагуглил только пример по получению данных, а нужно отправить. Это реально?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. RustamZz 19.09.22 15:55 Сейчас в теме
(1)
    HTTPЗапрос = Новый HTTPЗапрос(РесурсНаСервере);
    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
    Результат  = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
8. koln 20.09.22 06:20 Сейчас в теме
(1)А есть описание этого веб-сервиса? Там должно быть указано, какие методы что делают. Затем на нужный метод передать свои данные "Прокси.<имя_метода(параметры)>"
2. hercares 19.09.22 15:39 Сейчас в теме
Суть в том, что я сформировал файл xml по техзаданию и мне нужно его отправить на веб сервис. Я поднял веб сервис, используя apache24, прочитал WS ссылку, но понятия не имею, каким образом мне отправить XML файл на этот сервис. Прошу пнуть в нужном направлении
3. hercares 19.09.22 15:41 Сейчас в теме
Прокси = WSСсылки.rinkai.СоздатьWSПрокси("http://webservice.test.new/","WebService8InterfaceService","WebService8InterfacePort");

ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://webservice.test.new/").Получить("InsertOrders");

WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.wsKey = "eur";
WSПараметр.depotUserDefinedId = "ED";
//WSПараметр.locationsAndOrders = ЗаписьXML;


//Запрос = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://webservice.test.new/", "InsertOrders"));


ЧтениеXML = Новый ЧтениеXML;

ЧтениеXML.ОткрытьФайл("d:\order.xml");

Прокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
5. hercares 19.09.22 15:57 Сейчас в теме
(4) Рустам, это веб сервис, а не http сервис. Как это привязать к WS сервису
6. RustamZz 19.09.22 16:03 Сейчас в теме
(5) Извините, I'm sorry, Гафу ит.
7. hercares 19.09.22 16:30 Сейчас в теме
Вот здесь человек спрашивает то же самое, он вроде решил этот вопрос, но не рассказал как ((
https://forum.mista.ru/topic.php?id=793398
9. webester 25 20.09.22 06:37 Сейчас в теме
По этой вебссылке которую ты получил, есть описание всех типов данных. И модель данных которые ожидает сервис. Так же по этой ссылке есть описание метода который необходимо вызвать. Просто пройди по ссылке глазками и глянь. Все необходимые данные есть в wsdl - для этого он и нужен. Наверняка имя метода есть и где-то в прокси, который создаешь из ссылки, сейчас лень смотреть. Но это не имеет значения. После того как прочитал xml вызывай метод как тебе подсказали уже в (8)
10. hercares 20.09.22 07:27 Сейчас в теме
(8) Если посмотреть в конфигураторе WS ссылку, там есть методы. Вот меня интересует метод InsertOrders. Но как его применить.
Если я пробую это делать по вашему комментарию типа Прокси.InsertOrders(ЧтениеXML), то получаю ошибку "Ошибка при вызове метода контекста", а если посмотреть детально эту ошибку, то с "по причине: Несоответствие типов (параметр номер '1')"
Где глянуть, какой должен быть тип параметра, может туда нужно передать ОбъектXDTO
11. user1831019 20.09.22 07:35 Сейчас в теме
(10) Потому что ЧтениеXML - это вовсе не XML-текст.
15. koln 20.09.22 14:35 Сейчас в теме
(10)На скринах прилагаю образец своего веб-сервиса. Там один входной параметр "PaymentData" с типом "Message" из пакета "http://www.1c.kz/esd/message". Объект "Message", в свою очередь, состоит из трех параметров. Т.к. данный пакет у меня универсальный и используется и в других методах, то в данном случае я заполняю только "Documents" (тип СписокXDTO). Заполняю я его данными объекта "PaymentsData".
Данные отправляю на него следующим образом:
Определения = Новый WSОпределения("Полный_путь_к_сервису?wsdl","Имя_пользователя","Пароль_пользователя"); 
Прокси = Новый WSПрокси(Определения,"http://DataExchangeESD","ISP_DataExchangeESD_BK", "ISP_DataExchangeESD_BKSoap");
Прокси.Пользователь = "Имя_пользователя";
Прокси.Пароль = "Пароль_пользователя";
			
ТипОтвета = Прокси.ФабрикаXDTO.Тип("http://www.1c.kz/esd/message","Message");
ДанныеОбъект = Прокси.ФабрикаXDTO.Создать(ТипОтвета);

Пока РезультатЗапроса.Следующий() Цикл 
				
	ТипОбъекта = Прокси.ФабрикаXDTO.Тип("http://www.1c.kz/esd/message","PaymentsData");
	XDTOОбъект = Прокси.ФабрикаXDTO.Создать(ТипОбъекта);
				
	XDTOОбъект.PaymentRef 	= XMLСтрока(РезультатЗапроса.Ссылка.УникальныйИдентификатор());
	XDTOОбъект.ChecktRef 	= XMLСтрока(РезультатЗапроса.ДокументОснование.УникальныйИдентификатор());
	XDTOОбъект.Summ 		= РезультатЗапроса.СуммаДокумента;
				
	ДанныеОбъект.Documents.Добавить(XDTOОбъект);
				
КонецЦикла;

ОтветСервиса = Прокси.CashReceipts(ДанныеОбъект);
Показать

В Вашем случае, если несколько параметров, то смотрите, какого они типа и, если это простой тип (строка, число, булево), то заполняете его сразу соответствующими данными. Если же это сложный тип, то создаете XDTOОбъект нужного типа и заполняете его данными. И так, пока не разложите все на параметры с простым типом.
Прикрепленные файлы:
12. hercares 20.09.22 07:35 Сейчас в теме
(9) В нужном мне методе используются параметры wsKey, depotUserDefinedId - это строки для авторизации. И locationsAndOrders - это массив, котором выгружаются документы "Заказы"
В (8) мне подсказали, что нужно выполнить вот такой код Прокси.InsertOrders(параметры). В каком виде мне передать эти параметры, по одному или в структуре. И где можно увидеть хоть один пример, как это делается.
Вчера начал дергать заказчика с его ТЗ, так он говорит мне, используйте POST для передачи данных на наш WS сервис. Если это WS, какие тут могут быть http ((
13. webester 25 20.09.22 09:30 Сейчас в теме
(12
)В каком виде мне передать эти параметры, по одному или в структуре.
Какие параметры, какого типа принимает метод, тоже должно быть написано в wsdl. Есть возможность куда-то сохранить wsdl?
14. hercares 20.09.22 14:10 Сейчас в теме
(13) Да, есть возможность сохранить в файл wdsl
17. webester 25 20.09.22 18:39 Сейчас в теме
(14) Продолжайте наблюдение
16. hercares 20.09.22 15:34 Сейчас в теме
(15) Дружище, спасибо вам за ответ, очень ценю ваше время. Отпишусь о результатах
18. hercares 22.09.22 22:06 Сейчас в теме
В общем, решить задачу, используя WS сервис не получилось. Проблема решилась костылем

//....
СтрЗапрос = НовыйXML.Закрыть();

Результат =Неопределено;
АдресСервера ="https://server.eu";
xmlHttp = New COMОбъект("MSXML2.xmlHttp");
xmlHttp.OPEN ("POST", АдресПодключения, False);
xmlHttp.setRequestHeader ("Host", АдресСервера);
xmlHttp.setRequestHeader ("Content-type", "text/xml;charset=UTF-8");
xmlHttp.SEND(СтрЗапрос);
Если xmlHttp.status = 200 Тогда
//здесь код
КонецЕсли;
19. user1203706 22.09.22 22:34 Сейчас в теме
(1)
ежели в дереве есть ws ссылка, то как пример передачи:

	ПространствоИмен = ПолучитьЗначениеСвойстваИзСтруктуры(СтруктураНастроек,"ПространствоИмен");
	СервисВася=WSСсылки.Вася.СоздатьWSПрокси(ПространствоИмен, "ИмпортДанных", "ИмпортДанныхSoap");
	СервисВася.Пользователь = Пользователь;
	СервисВася.Пароль = Пароль;
	Фабрика = СервисВася.ФабрикаXDTO;
	 
	ДанныеXDTO = Фабрика.Создать(Фабрика.Тип(ПространствоИмен, "DataType"));
	ДанныеXDTO.BegPeriod = НачПериода;
	ДанныеXDTO.EndPeriod = КонПериода;
        //......заполняем остальную хрень
        ОтветСервиса = СервисВася.Request(ДанныеXDTO);  
Показать


(18) покажи картинку ws-ссылки из дерева метаданных. Там же есть все методы web сервера, схемы данных для фабрики.
Оставьте свое сообщение
Вакансии
Программист 1С
Электросталь
зарплата до 200 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Автор новостей об 1С, налогах и бухучете на INFOSTART.RU
Санкт-Петербург
По совместительству

Программист 1С
Екатеринбург
зарплата от 50 000 руб.
По совместительству

Ведущий разработчик 1С (техлид внутреннего учета)
Новосибирск
зарплата от 230 000 руб.
Полный день