Вызов веб сервиса и передача параметра

1. _mir_ 38 24.09.13 12:32 Сейчас в теме
Осуществляю вызов стороннего веб-сервиса.
В дереве метаданных добавил WS-ссылку. Результат здесь:
Мне необходимо вызвать метод веб-сервиса saveAssortment(parametrs).
Для передачи параметров был описан пакет XDTO
Создаю Объект XDTO для строки моей таблицы ассортимента:
ТипXDTO_СтрокаАссортимента = ФабрикаXDTO.Тип("http://com.iqtech.processing/onec", "assortmentOneC");
  ОбъектXDTO_СтрокаАссортимента = ФабрикаXDTO.Создать(ТипXDTO_СтрокаАссортимента);

Заполняю его данными.
Далее создаю Объект XDTO для таблицы с данными состоящая из ОбъектXDTO_СтрокаАссортимента
ТипXDTO_ТаблицаАссортимента = ФабрикаXDTO.Тип("http://com.iqtech.processing/onec", "saveAssortment"); 
  ОбъектXDTO_ТаблицаАссортимента = ФабрикаXDTO.Создать(ТипXDTO_ТаблицаАссортимента); 

И наполняю объект таблицы XDTO элементами объектами XDTO строки:
ОбъектXDTO_ТаблицаАссортимента.assortmentOneC.Добавить(ОбъектXDTO_СтрокаАссортимента);	


Создаю прокси:
Прокси = WSСсылки.IQtech.СоздатьWSПрокси("http://com.iqtech.processing/onec","OneCWebService","OneCWebServicePort");

Вызываю метод веб сервиса с параметрами:
Результат = Прокси.saveAssortment(ОбъектXDTO_ТаблицаАссортимента);

В итоге вылетает ошибка:
Ошибка вызова операции сервиса: {http://com.iqtech.processing/onec}:OneCWebService:saveAssortment()
по причине:
Неизвестная ошибка. Несоответствие типов XDTO:
Тип '{http://com.iqtech.processing/onec}saveAssortment' не найден
Тип принадлежит пакету, отсутствующему в фабрике типов XDTO
по причине:
Несоответствие типов XDTO:
Тип '{http://com.iqtech.processing/onec}saveAssortment' не найден
Тип принадлежит пакету, отсутствующему в фабрике типов XDTO


1) Я не уверен какие данные именно кидать в параметр метода. Возможно нужно производить сериализацию?
2) Пакет у меня описан именно с таким пространством имен, который объявлен в веб-сервисе. Почему вылетает такая ошибка?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
13. maxan 25.09.13 11:22 Сейчас в теме
Есть решение. Вы используете свой XDTO пакет. а нужно использовать XDTO пакет того прокси к которому подключаетесь.

Прокси = Новый WSПрокси(Определения,........;

СтрокаЗаказаТип = Прокси.ФабрикаXDTO.Тип("http://.......
ЗаказТип = Прокси.ФабрикаXDTO.Тип("http://.........
ДанныеОтправкиТип = Прокси.ФабрикаXDTO.Тип("http://.......

ДанныеОтправки = Прокси.ФабрикаXDTO.Создать(ДанныеОтправкиТип);

Именно поэтому она и ругается что не может найти!
amital; kondrat1C; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. AllexSoft 24.09.13 13:12 Сейчас в теме
(1) _mir_, параметры в веб-сервисе у себя который создал не тот тип стоит, или пространство имен не то... или на сервере параметр не того типа ждет сервер или не то пространство имен.. легче посмотреть вообщем) там миллион мест где может все зависеть от одной галки
4. _mir_ 38 24.09.13 13:17 Сейчас в теме
(3) AllexSoft, в качестве параметра достаточно передать сам XDTO объект или нужно производить сериализацию?
5. AllexSoft 24.09.13 13:31 Сейчас в теме
(4) _mir_, конечно нужно производить сериализацию... ведь между клиентом и сервером данные должны идти в виде текстовых (сериализованных) данных
2. _mir_ 38 24.09.13 12:52 Сейчас в теме
6. _mir_ 38 24.09.13 13:59 Сейчас в теме
Сериализацию сделал таким образом:
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку(); // запись в строку	
ФабрикаXDTO.ЗаписатьXML(Запись, ОбъектXDTO_ТаблицаАссортимента);
ДанныеXML = Запись.Закрыть();	
Результат = Прокси.saveAssortment(ДанныеXML);

И полученные данные XML кидаю в параметр. Правильно ли это? Вылетает с ошибкой "Несоответствие параметров: Параметр 1"
7. AllexSoft 24.09.13 14:10 Сейчас в теме
(6) _mir_, параметр у тебя какого типа ?
8. _mir_ 38 24.09.13 14:21 Сейчас в теме
(7) AllexSoft, тип параметра: saveAssortment, это можно увидеть на картинке вверху
9. AllexSoft 24.09.13 14:33 Сейчас в теме
(8) _mir_, попробуй его поставить в стринг
10. VasRogov 5 24.09.13 14:33 Сейчас в теме
(8) а у saveAssortment какой Тип ?
11. _mir_ 38 24.09.13 14:50 Сейчас в теме
saveAssortment имеет объектный тип.
а параметр имеет тип "строка"
12. _mir_ 38 24.09.13 14:52 Сейчас в теме
Вот содержание параметра в отладчике:
<saveAssortment xmlns="http://com.iqtech.processing/onec" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="saveAssortment">
	<assortmentOneC>
		<isComplex>false</isComplex>
		<date>2013-09-09T00:00:00</date>
		<id>e1dd13f1-1924-11e3-9f7d-001e37241e0d</id>
		<menuGroup>1</menuGroup>
		<name>Суп мясной</name>
		<orgId>8</orgId>
		<price>200</price>
		<show>true</show>
	</assortmentOneC>
	<assortmentOneC>
		<isComplex>false</isComplex>
		<date>2013-09-09T00:00:00</date>
		<id>e1dd13f5-1924-11e3-9f7d-001e37241e0d</id>
		<menuGroup>1</menuGroup>
		<name>Компот</name>
		<orgId>8</orgId>
		<price>344</price>
		<show>true</show>
	</assortmentOneC>
	<assortmentOneC>
		<isComplex>false</isComplex>
		<date>2013-09-09T00:00:00</date>
		<id>e1dd13f8-1924-11e3-9f7d-001e37241e0d</id>
		<menuGroup>1</menuGroup>
		<name>Пюре</name>
		<orgId>8</orgId>
		<price>22</price>
		<show>true</show>
	</assortmentOneC>
</saveAssortment>
Показать
13. maxan 25.09.13 11:22 Сейчас в теме
Есть решение. Вы используете свой XDTO пакет. а нужно использовать XDTO пакет того прокси к которому подключаетесь.

Прокси = Новый WSПрокси(Определения,........;

СтрокаЗаказаТип = Прокси.ФабрикаXDTO.Тип("http://.......
ЗаказТип = Прокси.ФабрикаXDTO.Тип("http://.........
ДанныеОтправкиТип = Прокси.ФабрикаXDTO.Тип("http://.......

ДанныеОтправки = Прокси.ФабрикаXDTO.Создать(ДанныеОтправкиТип);

Именно поэтому она и ругается что не может найти!
amital; kondrat1C; +2 Ответить
15. _mir_ 38 25.09.13 12:15 Сейчас в теме
(13) maxan, Да, я так и сделал, до меня вчера это дошло. Так что это самый правильный ответ
14. maxan 25.09.13 11:23 Сейчас в теме
Тоесть, в вашей базе даже не нужно создавать никакого пакета XDTO, так как вы будете для передачи данных использовать пакет XDTO той базу, куда вы хотите передать данные. о как :)
dmitryafanasyev91; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот