|
Веб-сервис не воспринимает свой же тип входящего параметра :( | ☑ | ||
---|---|---|---|---|
0
siggoron
23.04.12
✎
22:29
|
Написан веб-сервис который имеет одну процедуру с одним входящим объектом. Входящий объект описан в XDТO пакете и имеет 2 свойства, одно строкового значение, другое число.
Вот в чем проблема: если в процедуру сервиса передавать XDТO объект с указанием необходимого типа – всегда появляется ошибка «не соответствие типов», а если данному объекту указать тип по умолчанию, то проблем никаких, только вот все свойства получают строковый тип, что не есть хорошо. Может, кто сталкивался с данной проблемой – помогите очень надо. Вот куски кода: Определения = Новый WSОпределения("http://localhost/CRM/ws/Mediaplan.1cws?wsdl", 1, 1); WS = Новый WSПрокси(Определения, "http://www.sntex.1c.ru", "Mediaplan", "MediaplanSoap"); WS.Пользователь = 1; WS.Пароль = 1; ИмяФайла = "D:\Kontragent.xml"; МойXML = Новый ЧтениеXML; МойXML.ОткрытьФайл(ИмяФайла); //--// ФайлыXSD = Новый Массив(); ФайлыXSD.Добавить("D:\M.xsd"); МояФабрикаXDTO = СоздатьФабрикуXDTO(ФайлыXSD); адресТип = МояФабрикаXDTO.Тип("http://www.sntex.1c.ru", "Kontragent"); //--// //Kontragent = МояФабрикаXDTO.ПрочитатьXML(МойXML, адресТип); - так веб сервис выдает ошибку //Kontragent = МояФабрикаXDTO.ПрочитатьXML(МойXML); - так веб-сервис работает но все значение приобретают строковый тип МойXML.Закрыть(); Сообщить(""+WS.SetKontragent(Kontragent)); |
|||
1
acsent
23.04.12
✎
22:43
|
зачем через файл все делать?
|
|||
2
siggoron
23.04.12
✎
22:43
|
(1) какая разница, факт в том, что входной параметр не понимает свой родной тип
|
|||
3
acsent
23.04.12
✎
22:46
|
(2) значит файл не правильный
|
|||
4
siggoron
23.04.12
✎
22:56
|
(3) 100 правильный, т.к объект до вызова процедуры создается и без ошибок и с типами которые надо
|
|||
5
acsent
23.04.12
✎
22:57
|
и где же он создается? что то не видно
|
|||
6
siggoron
23.04.12
✎
23:02
|
Процедура ОсновныеДействияФормыСформироватьXMLКонтрагент(Кнопка)
ФайлыXSD = Новый Массив(); ФайлыXSD.Добавить("D:\M.xsd"); МояФабрикаXDTO = СоздатьФабрикуXDTO(ФайлыXSD); адресТип = МояФабрикаXDTO.Тип("http://www.sntex.1c.ru", "Kontragent"); Kontragent = МояФабрикаXDTO.Создать(адресТип); Kontragent.ID = "id001"; Kontragent.Type = 2; Kontragent.Name = "test1"; Kontragent.INN = "111111111"; Kontragent.KPP = "222222222"; Kontragent.OGRN = "333333333"; ИмяФайла = "D:\Kontragent.xml"; МойXML = Новый ЗаписьXML; ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь); МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML); МойXML.ЗаписатьОбъявлениеXML(); МояФабрикаXDTO.ЗаписатьXML(МойXML, Kontragent); МойXML.Закрыть(); КонецПроцедуры А схема получена экспортом средствами конфы |
|||
7
siggoron
23.04.12
✎
23:33
|
Всё нашел проблему, а вот что помогло:
Каждый клиентский прокси (клиентская часть web-сервиса - объект WSПрокси) содержит ссылку на фабрику XDTO, которая может использоваться для создания объектов и значений XDTO для передачи в качестве параметров и возвращаемых значений операций web-сервисов. Заметим, что глобальная XDTO фабрика (получаемая через свойство глобального контекста ФабрикаXDTO) не может быть использована для создания объектов и значений для передачи через прокси, даже если она содержит типы с такой же структурой и именами. Эти типы все равно будут считаться несовместимыми с типами данных web-сервиса. Каждая реализация веб-сервиса (серверная часть web-сервиса) может использовать глобальную XDTO фабрику (получаемую через свойство глобального контекста ФабрикаXDTO) для создания объектов и значений web-сервиса. |
|||
8
siggoron
23.04.12
✎
23:36
|
Вот рабочий код:
Процедура SetKontragentНажатие(Элемент) Определения = Новый WSОпределения("http://localhost/CRM/ws/Mediaplan.1cws?wsdl", 1, 1); WS = Новый WSПрокси(Определения, "http://www.sntex.1c.ru", "Mediaplan", "MediaplanSoap"); WS.Пользователь = 1; WS.Пароль = 1; ИмяФайла = "D:\Kontragent.xml"; МойXML = Новый ЧтениеXML; МойXML.ОткрытьФайл(ИмяФайла); WSТип = WS.ФабрикаXDTO.Тип("http://www.sntex.1c.ru", "Kontragent"); Kontragent = WS.ФабрикаXDTO.ПрочитатьXML(МойXML, WSТип); МойXML.Закрыть(); Сообщить(""+WS.SetKontragent(Kontragent)); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |