21.01.10 — 16:14
Здравствуйте!
Надеюсь на вашу помощь, бьюсь безрезультатно уже который день, как в стену уперся (
Ситуация такая. Есть сайт, предоставляющий веб сервис рассылки смс, адрес WSDL пакета таков:
http://promotion.md:8080/ecm/services/soap?wsdl
Создаю в конфигурации объект «WS-Ссылка», все создается без проблем.
Необходимо реализовать работу с этим сервисом из 1С.
Написал простенькую обработочку, которая обращается к функции GetCurrentCredit этого веб сервиса.
Прокси = WSСсылки.SMS.СоздатьWSПрокси(«http://soap.ecm.emotion.com/»,»EcmService»,»EcmServicePort»);
Фабрика = Прокси.ФабрикаXDTO;
ПараметрТип = Фабрика.Тип(«http://soap.ecm.emotion.com/»,»GetCurrentCredit»);
ЛогинТип = Фабрика.Тип(«http://soap.ecm.emotion.com/»,»auth»);
Логин = Фабрика.Создать(ЛогинТип);
Логин.username = «username»;
Логин.password = «password»;
РезультатТип = Фабрика.Тип(«http://soap.ecm.emotion.com/»,»result»);
Результат = Фабрика.Создать(РезультатТип);
Результат = Прокси.GetCurrentCredit(Логин);
После запуска 1С думает и выкидывает вот такую вот ошибку:
{Обработка.Обработка2.Форма.Форма(90)}: Ошибка при вызове метода контекста (GetCurrentCredit): Ошибка вызова операции сервиса: {http://soap.ecm.emotion.com/}:EcmService:GetCurrentCredit()
Результат = Прокси.GetCurrentCredit(Логин);
по причине:
Ошибка вызова операции сервиса: {http://soap.ecm.emotion.com/}:EcmService:GetCurrentCredit()
по причине:
Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://soap.ecm.emotion.com/}result — [1,179]
Проверка дополнительного свойства:
форма: Элемент
имя: amount
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://soap.ecm.emotion.com/}result — [1,179]
Проверка дополнительного свойства:
форма: Элемент
имя: amount
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://soap.ecm.emotion.com/}result
Причем ошибка не зависит от того, присваиваю ли я возвращаемый результат чему-то (в данном случае переменной Результат) или нет. Не зависит и от того, какие логин и пароль передаю. Возникает впечатление, что 1С просто не может обработать ответ с сервера… Что-то можно сделать? Может я что-то делаю не так? Очень прошу помощи, не первый день уже бьюсь с этой дрянью 🙁
1 — 22.01.10 — 09:45
up
2 — 22.01.10 — 09:49
ошибка в веб-сервисе у тебя скорее всего… проверь, какой тип возвращает и как он описан в пакете…
3 — 22.01.10 — 09:51
млин… невнимательно прочитал сабж…
4 — 22.01.10 — 09:51
Web сервис не мой, он предоставляется извне, и менять я его не могу. Разработчики заявляют что с C# он работает без проблем.
Может я что то не так определяю в обработке? Или это кривые руки девелоперов сервиса?
Сразу говорю, сервис не 1Совский.
5 — 22.01.10 — 09:57
а зачем вот это?
ПараметрТип = Фабрика.Тип(«http://soap.ecm.emotion.com/»,»GetCurrentCredit»);
ты ничего больше не забыл?
и это тоже непонятно
РезультатТип = Фабрика.Тип(«http://soap.ecm.emotion.com/»,»result»);
Результат = Фабрика.Создать(РезультатТип);
6 — 22.01.10 — 10:11
Это просто я делал много попыток, чтобы заработало, забыл убрать. ДА и объявление результата тоже не нужно, но это не влияет на результат. Просто пытался уже подходить со всех сторон.
7 — 22.01.10 — 11:15
Up
8 — 22.01.10 — 11:20
(7) через прокси работаешь? у меня было похожее, прокси мешал…
9 — 22.01.10 — 12:40
А как обойти проблему? Интернет в офисе раздается через прокси, это да.
Пробовал дома, дома прокси нет (интернет раздается через рутер), возникла та же проблема. Может тогда дело не в прокси?
10 — 22.01.10 — 14:35
Up
11 — 22.01.10 — 14:52
12 — 22.01.10 — 14:56
Результат = Прокси.GetCurrentCredit(Логин);
функция имеет параметры? может их больше или меньше? тип параметра — строка?
13 — 22.01.10 — 15:06
Функция GetCurrentCredit() имеет один параметр auth.
Это структура со строчными параметрами username и password.
Система не ругается на недопустимый параметр, она почему то ругается на возвращаемое значение этой функции, которое имеет тип result.
14 — 22.01.10 — 15:17
при выполнении функции сервиса, может возникать внутренняя ошибка.
тут сервис в натуре пощупать надо, а доступа к нему нету
15 — 22.01.10 — 16:02
У них похоже сервак лежал. Уже есть доступ.
Работал с этим сервисом через сайт http://www.soapclient.com/soaptest.html — все работает. Через 1с — не хочет.
16 — 22.01.10 — 16:26
Up
17 — 22.01.10 — 16:37
(16) Раньше 1С-ка не дружила с web-сервисами на Java…
18 — 22.01.10 — 16:48
Разработчик заявляет, что сервис писался на .NET
19 — 22.01.10 — 16:58
Попробуй ответный xml сохранить в файл. И открыть его в фабрике
20 — 22.01.10 — 16:59
чтениеХМЛ = Новый ЧтениеXML;
чтениеХМЛ.УстановитьСтроку(СокрЛП(XML));
хдто = ФабрикаXDTO.ПрочитатьXML(чтениеХМЛ);
21 — 22.01.10 — 17:09
А как сохранить ответ в файл? Ваш код, я так понимаю, читает уже сохраненный XML.
22 — 22.01.10 — 17:41
Up
23 — 23.01.10 — 11:48
Up
24 — 25.01.10 — 14:07
Up
25 — 26.01.10 — 14:56
Нужна помощь, не знаю в какую сторону копать. Если это глюк 1С (несостыковка со сторонним сервисом), как реализовать работу с этим веб сервисом сторонними средствами? Главное чтобы работало все через 1С
26 — 26.01.10 — 15:08
Скорее глюк этого вебсервиса, проверь получится ли у тебя вебсервисом аэрофлота работать.
27 — 26.01.10 — 15:39
С вебсервисом могу работать через сторонние средства, например такие как http://www.soapclient.com/soaptest.html
Аэрофлот проверить не могу, надо просить админа добавить мне его в разрешенный список… Даже если он заработает, что это мне даст?
Может можно как то сохранить ответный XML в файл, и вручную его обрабатыватть? Или вручную формировать XML и отправлять на сервер. Только как это реализовать? Вопрос критичен, к сожалению, в пятницу уже надо сдать рабочую версию, а решения все нет 🙁
28 — 26.01.10 — 15:53
В браузере по ссылке http://promotion.md:8080/ecm/services/soap?wsdl ничего не вижу. А должен был получить wsdl. Не работает вебсервис?
29 — 26.01.10 — 15:56
Упс.. нагнал — ff все показал, хром меня ввел в заблуждение.
30 — 26.01.10 — 16:42
хм.. а у меня выдает это:
Ошибка проверки данных XDTO: Структура объекта не соответствует типу: {http://soap.ecm.emotion.com/}result
Ошибка преобразования данных XDTO: Чтение объекта типа: {http://soap.ecm.emotion.com/}result — [1,217] Проверка дополнительного свойства: форма: Элемент имя: comment
Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: {http://soap.ecm.emotion.com/}result — [1,217] Проверка дополнительного свойства: форма: Элемент имя: comment
Ошибка вызова операции сервиса: {http://soap.ecm.emotion.com/}:EcmService:GetCurrentCredit()
Ошибка вызова операции сервиса: {http://soap.ecm.emotion.com/}:EcmService:GetCurrentCredit()
Ошибка при вызове метода контекста (GetCurrentCredit): Ошибка вызова операции сервиса: {http://soap.ecm.emotion.com/}:EcmService:GetCurrentCredit()
31 — 26.01.10 — 16:53
Вобщем 1С не может принять результат потому что он не соответствует схеме.
Элемент amount (на который 1С ругается в (0)) находится раньше значит его проверка проходит нормально.
Элемент comment задан в схеме как не обязательный и тип у него простая строка.
Вобщем без SOAP отладчика тут неразобраться (на худой конец просто сниффер пакетов).. 🙂 надо смотреть голый xml который приходит с сервера.
В отладочных целях можно также сэмулировать SOAP запрос объектом HTTPСоединение и собственно получить сырой ответ от сервака.
Вобщем до ответа в виде XML добраться надо.
32 — 26.01.10 — 16:54
вот какой должен быть ответ в сыром виде с сервера:
<soap:Envelope xmlns:soap=»http://schemas.xmlsoap.org/soap/envelope/»><soap:Body><ns2:GetCurrentCreditResponse xmlns:ns2=»http://soap.ecm.emotion.com/»><return type=»ok»><amount>10.0</amount></return></ns2:GetCurrentCreditResponse></soap:Body></soap:Envelope>
33 — 26.01.10 — 17:03
(32) В приведенном примере ответа отсутствует элемент recipient. По схеме он должен быть хотя бы один.
34 — 26.01.10 — 17:08
Ну так не на него же ругается… Да и зачем в итоге серверу возвращать пустую инфу, если он просто возвращает то, что у него попросили?
35 — 26.01.10 — 17:12
Да, не на него. А то что в (32) это именно то что возвращает сервер по твоему запросу?
А тут логику искать не надо, надо просто чтобы все соответствовало схеме.
36 — 26.01.10 — 17:22
(34) У тебя код остался таким же как и в (0)?
37 — 26.01.10 — 17:25
Тот сырой XML текст, что я привел, это ответ сервера на функцию GetCurrentCredit(). Получено с помощью сайта, что я приводил выше.
38 — 27.01.10 — 11:41
Up
39 — 27.01.10 — 14:07
>>Может можно как то сохранить ответный XML в файл, и вручную его обрабатыватть? Или вручную формировать XML и отправлять на сервер. Только как это реализовать? Вопрос критичен, к сожалению, в пятницу уже надо сдать рабочую версию, а решения все нет 🙁
40 — 27.01.10 — 16:35
Up
41 — 27.01.10 — 18:35
У меня была проблема с отладкой Вэб сервиса при передаче структуры. Если объявить через LocflHOST на сервере, то структура проходит. Если с другого компютера через глобальный адрес то метод ложится с ошибкой преобразования во втором байте чего то там.
42 — 28.01.10 — 14:05
Up
43 — 28.01.10 — 16:47
Сделай на тоже Net или нативе Delphi или С++ Оле Объект который будет обращаться к серверу
44 — 28.01.10 — 17:08
много букв. как я курил веб сервисы и их дружбу с 1С.
шаг первый — проверить сервис на одыкватность — использую soapUI 3.0 бесплатное. Удобное
шаг второй — при условии что выполнен первый — начинаем курить 1С.
импортируем в 1С сервис (это раз). Даже на этом этапе можно увидеть дружит 1С или нет с этим сервисом. Хоть и стандарт обще принятый, но то что курят одни системы 1С на отказ не курит.
домой приду попробую курнуть.
45 — 28.01.10 — 17:18
кстати тож не могу получить тот самы wdsl =/
Proxy Encountered Error
Connection Timeout: Could not contact the remote server. Possible causes include mistyped URL, transient network problems, overloaded remote server, and misconfigured proxy server.
хотя может и рабочая прокся пьет. так что с дому гляну
46 — 28.01.10 — 22:55
Ошибка при вызове метода контекста (GetCurrentCredit): Ошибка вызова операции сервиса: {http://soap.ecm.emotion.com/}:EcmService:GetCurrentCredit()
Есть нормальное описание работы сервиса и методов, а не только вашего представления ?
код для затравки (wdsl принят в конфу как ws-ссылка «WS»)
Функция СоздатьПрокси(знач ИмяWS = «WS»,
знач URI = «http://soap.ecm.emotion.com/»,
знач ИмяСервис = «EcmService»,
знач ИмяПорт = «EcmServicePort»,
знач ИмяПользователяR3 = «»,
знач ПарольR3 = «») Экспорт
Попытка
Прокси = WSСсылки[ИмяWS].СоздатьWSПрокси(URI, ИмяСервис, ИмяПорт);
Прокси.Пользователь = ИмяПользователяR3;
Прокси.Пароль = ПарольR3;
Исключение
Сообщить(ОписаниеОшибки());
Прокси = Неопределено;
КонецПопытки;
возврат Прокси;
КонецФункции // СоздатьПрокси()
Функция СоздатьОписаниеТипаДанныхSOAP(ПространствоИмен = «http://soap.ecm.emotion.com/»,
ТипSOAP = «auth»,
Прокси = Неопределено)
Если Прокси = Неопределено Тогда Прокси = СоздатьПрокси();
КонецЕсли;
ТипДанныхЭлементаSOAP = Неопределено;
Если не Прокси = Неопределено Тогда
Попытка
ТипДанныхЭлементаSOAP = Прокси.ФабрикаXDTO.Пакеты.Получить(ПространствоИмен).Получить(ТипSOAP);
Исключение
возврат Неопределено;
КонецПопытки;
КонецЕсли;
возврат ТипДанныхЭлементаSOAP;
КонецФункции
Процедура ТестSOAP() Экспорт
Прокси = Неопределено;
ТипДанныхЭлементаSOAP = СоздатьОписаниеТипаДанныхSOAP(«http://soap.ecm.emotion.com/», «auth», Прокси);
Логин = Прокси.ФабрикаXDTO.Создать(ТипДанныхЭлементаSOAP);
Логин.username = «username»;
Логин.password = «password»;
Попытка
РезультатSOAP = Прокси.GetCurrentCredit(Логин);
Сообщить(РезультатSOAP);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
xzorkiix
47 — 28.01.10 — 22:59
Спалил малость свои переменный =)
Просмотров 12к. Опубликовано 24 октября, 2018 Обновлено 24 октября, 2018
Ошибка преобразования данных XDTO: Текст XML содержит недопустимый символ.
На самом деле ошибка преобразования XDTO является не какой-то определенной ошибкой, а является большим семейством ошибок возникающих при работе одного из базовых механизмов платформы 1С. Этот механизм обеспечивает передачу данных между различными подсистемами платформы, при этом данные из внутреннего представления одной подсистемы преобразуются в текстовый формат XML, передаются в другую подсистему, и там опять преобразуются во внутреннее представление. Ошибка преобразования XDTO говорит, что прямом или обратном преобразовании обнаружено какое-то несоответствие, из-за которого оно не может быть выполнено.
Частные причины ошибки
Существует очень много частных причин ошибки преобразования XDTO. Сведения доступные под кнопкой Подробно могут помочь в понимании частной причины, но далеко не всегда.
Прежде чем приступить к диагностике причины ошибки XDTO, следует выполнить стандартные профилактические операции над ИБ: очистить кэш, проверить состояния файла, выполнить тестирование ИБ.
Взаимодействие Клиента и Сервера
При запуске 1С в режиме Тонкий клиент взаимодействие клиента с ИБ происходит с использование преобразования XDTO, и если оно приводит к ошибке, то в тех случаях, когда это возможно, следует воспользоваться режим Толстый клиент.
Сырые и Неоригинальные решения
Если ошибка преобразования XDTO возникает в неоригинальной конфигурации или неоригинальной обработке, то возможно, причина в неоригинальном коде, который не был должным образом оттестирован. Это возможно и в оригинальных решения от 1С после установки сырых обновлений.
В этом случае необходимо отказаться от использования неоригинального или сырого решения и вернуться к предыдущему состоянию кода из архива.
Здравствуйте! Надеюсь на вашу помощь, бьюсь безрезультатно уже который день, как в стену уперся ( Ситуация такая. Есть сайт, предоставляющий веб сервис рассылки смс, адрес WSDL пакета таков: Создаю в конфигурации объект «WS-Ссылка», все создается без проблем. Необходимо реализовать работу с этим сервисом из 1С. Написал простенькую обработочку, которая обращается к функции GetCurrentCredit этого веб сервиса. После запуска 1С думает и выкидывает вот такую вот ошибку: {Обработка.Обработка2.Форма.Форма}: Ошибка при вызове метода контекста (GetCurrentCredit): Ошибка вызова операции сервиса: { Результат = Прокси.GetCurrentCredit(Логин); по причине: Ошибка вызова операции сервиса: { по причине: Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: { — [1,179] Проверка дополнительного свойства: форма: Элемент имя: amount по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: { — [1,179] Проверка дополнительного свойства: форма: Элемент имя: amount по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: { Причем ошибка не зависит от того, присваиваю ли я возвращаемый результат чему-то (в данном случае переменной Результат) или нет. Не зависит и от того, какие логин и пароль передаю. Возникает впечатление, что 1С просто не может обработать ответ с сервера… Что-то можно сделать? Может я что-то делаю не так? Очень прошу помощи, не первый день уже бьюсь с этой дрянью 🙁
ошибка в веб-сервисе у тебя скорее всего… проверь, какой тип возвращает и как он описан в пакете…
млин… невнимательно прочитал сабж…
Web сервис не мой, он предоставляется извне, и менять я его не могу. Разработчики заявляют что с C# он работает без проблем. Может я что то не так определяю в обработке? Или это кривые руки девелоперов сервиса? Сразу говорю, сервис не 1Совский.
а зачем вот это? ПараметрТип = Фабрика.Тип(«http://soap.ecm.emotion.com/»,»GetCurrentCredit»); ты ничего больше не забыл? и это тоже непонятно
Это просто я делал много попыток, чтобы заработало, забыл убрать. ДА и объявление результата тоже не нужно, но это не влияет на результат. Просто пытался уже подходить со всех сторон.
через прокси работаешь? у меня было похожее, прокси мешал…
А как обойти проблему? Интернет в офисе раздается через прокси, это да. Пробовал дома, дома прокси нет (интернет раздается через рутер), возникла та же проблема. Может тогда дело не в прокси?
Что-то достучаться до не могу
функция имеет параметры? может их больше или меньше? тип параметра — строка?
Функция GetCurrentCredit имеет один параметр auth. Это структура со строчными параметрами username и password. Система не ругается на недопустимый параметр, она почему то ругается на возвращаемое значение этой функции, которое имеет тип result.
при выполнении функции сервиса, может возникать внутренняя ошибка. тут сервис в натуре пощупать надо, а доступа к нему нету
У них похоже сервак лежал. Уже есть доступ. Работал с этим сервисом через сайт — все работает. Через 1с — не хочет.
Раньше 1С-ка не дружила с web-сервисами на Java…
Разработчик заявляет, что сервис писался на .NET
Попробуй ответный xml сохранить в файл. И открыть его в фабрике
А как сохранить ответ в файл? Ваш код, я так понимаю, читает уже сохраненный XML.
Нужна помощь, не знаю в какую сторону копать. Если это глюк 1С (несостыковка со сторонним сервисом), как реализовать работу с этим веб сервисом сторонними средствами? Главное чтобы работало все через 1С
Скорее глюк этого вебсервиса, проверь получится ли у тебя вебсервисом аэрофлота работать.
С вебсервисом могу работать через сторонние средства, например такие как Аэрофлот проверить не могу, надо просить админа добавить мне его в разрешенный список… Даже если он заработает, что это мне даст? Может можно как то сохранить ответный XML в файл, и вручную его обрабатыватть? Или вручную формировать XML и отправлять на сервер. Только как это реализовать? Вопрос критичен, к сожалению, в пятницу уже надо сдать рабочую версию, а решения все нет 🙁
В браузере по ссылке ничего не вижу. А должен был получить wsdl. Не работает вебсервис?
Упс.. нагнал — ff все показал, хром меня ввел в заблуждение.
хм.. а у меня выдает это: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: { Ошибка преобразования данных XDTO: Чтение объекта типа: { — [1,217] Проверка дополнительного свойства: форма: Элемент имя: comment Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: { — [1,217] Проверка дополнительного свойства: форма: Элемент имя: comment Ошибка вызова операции сервиса: { Ошибка вызова операции сервиса: { Ошибка при вызове метода контекста (GetCurrentCredit): Ошибка вызова операции сервиса: {
Вобщем 1С не может принять результат потому что он не соответствует схеме. Элемент amount (на который 1С ругается в ) находится раньше значит его проверка проходит нормально. Элемент comment задан в схеме как не обязательный и тип у него простая строка. Вобщем без SOAP отладчика тут неразобраться (на худой конец просто сниффер пакетов).. 🙂 надо смотреть голый xml который приходит с сервера. В отладочных целях можно также сэмулировать SOAP запрос объектом HTTPСоединение и собственно получить сырой ответ от сервака. Вобщем до ответа в виде XML добраться надо.
вот какой должен быть ответ в сыром виде с сервера: <soap:Envelope xmlns:soap=»http://schemas.xmlsoap.org/soap/envelope/»><soap:Body><ns2:GetCurrentCreditResponse xmlns:ns2=»http://soap.ecm.emotion.com/»><return type=»ok»><amount>10.0</amount></return></ns2:GetCurrentCreditResponse></soap:Body></soap:Envelope>
В приведенном примере ответа отсутствует элемент recipient. По схеме он должен быть хотя бы один.
Ну так не на него же ругается… Да и зачем в итоге серверу возвращать пустую инфу, если он просто возвращает то, что у него попросили?
Да, не на него. А то что в это именно то что возвращает сервер по твоему запросу? А тут логику искать не надо, надо просто чтобы все соответствовало схеме.
У тебя код остался таким же как и в ?
Тот сырой XML текст, что я привел, это ответ сервера на функцию GetCurrentCredit. Получено с помощью сайта, что я приводил выше.
>>Может можно как то сохранить ответный XML в файл, и вручную его обрабатыватть? Или вручную формировать XML и отправлять на сервер. Только как это реализовать? Вопрос критичен, к сожалению, в пятницу уже надо сдать рабочую версию, а решения все нет 🙁
У меня была проблема с отладкой Вэб сервиса при передаче структуры. Если объявить через LocflHOST на сервере, то структура проходит. Если с другого компютера через глобальный адрес то метод ложится с ошибкой преобразования во втором байте чего то там.
Сделай на тоже Net или нативе Delphi или С++ Оле Объект который будет обращаться к серверу
много букв. как я курил веб сервисы и их дружбу с 1С. шаг первый — проверить сервис на одыкватность — использую soapUI 3.0 бесплатное. Удобное шаг второй — при условии что выполнен первый — начинаем курить 1С. импортируем в 1С сервис (это раз). Даже на этом этапе можно увидеть дружит 1С или нет с этим сервисом. Хоть и стандарт обще принятый, но то что курят одни системы 1С на отказ не курит. домой приду попробую курнуть.
кстати тож не могу получить тот самы wdsl =/ Proxy Encountered Error Connection Timeout: Could not contact the remote server. Possible causes include mistyped URL, transient network problems, overloaded remote server, and misconfigured proxy server. хотя может и рабочая прокся пьет. так что с дому гляну
Ошибка при вызове метода контекста (GetCurrentCredit): Ошибка вызова операции сервиса: { Есть нормальное описание работы сервиса и методов, а не только вашего представления ? код для затравки (wdsl принят в конфу как ws-ссылка «WS») Функция СоздатьПрокси(знач ИмяWS = «WS»,
Спалил малость свои переменный =)
Тэги:
Комментарии доступны только авторизированным пользователям