Имя: Пароль:
1C
 
Не могу подключиться к web-сервису. Ошибка разбора XML
0 mr_K
 
14.10.15
09:38
Даже на примере общедоступного вебсервиса. По http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL легко получаю описание в xml в браузере. Если пытаюсь на основании этого wsdl создать WSСсылка получаю от 1С-ки отлуп:
Ошибка разбора XML: - [1,1]
Фатальная ошибка
extra content at the end of the document
SystemID:http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL

Если создавать WSСсылку на основании xml, сохраненного из браузера, то создается, все читаемо. Далее все что можно сделать используя это описание - делается: прокси создается, типы параметров для разных функций определяются, т.е. xml рабочий. Но как только следует обращение к самому вебсервису - то фигвам.
Ошибка разбора XML:  - [1,1]
Фатальная ошибка:
Document is empty

1С 8.2.19.130

Интернеты читал, схожие, а то и идентичные случае описываются, решения увы не на нашел.
1 mr_K
 
14.10.15
14:38
Вобщем, вылечил. Если кому-то интересно - ниже описание.
Изначальная проблема была с проксей. После отключения прокси - получилось импортировать wsdl в 1С-ку напрямую, без использования файла. Но дальше, интереснее...
Использовал следующий код:

Прокси = WSСсылки.CBR_DailyInfoWebServ.СоздатьWSПрокси( "http://web.cbr.ru/";, "DailyInfo", "DailyInfoSoap");

//Получаем тип параметра, который передается в метод GetCursOnDate.
ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить(              "http://web.cbr.ru/").Получить("GetCursOnDate";);
//Создаем параметр на основе типа и заполняем значение параметра On_Date.
WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    WSПараметр.On_Date    = фДатаЗагрузки;
    
//Вызываем метод веб-сервиса, записываем результат в переменную КурсыВалют.
КурсыВалют = Прокси.GetCursOnDate(WSПараметр);

(честно спертый отсюда: http://habrahabr.ru/post/148658/)
До последней строчки все отрабатывало, на последней дропалось, со знакомой ошибкой:
Ошибка разбора XML:  - [1,1]
Фатальная ошибка:
Document is empty

Разбор пакетов, перехваченных фидлером натолкнул на мысль упростить код до:
Прокси = WSСсылки.CBR_DailyInfoWebServ.СоздатьWSПрокси( "http://web.cbr.ru/";, "DailyInfo", "DailyInfoSoap");
КурсыВалют = Прокси.GetCursOnDate(фДатаЗагрузки);

И о чудо! Оно заработало. Т.е. когда я отдавал вебсервису в качестве аргумента функции параметр, созданный в рамках объектной модели вебсервиса, 1С создавало кривой пакет, когда начал передавать просто сериализуемый тип данных - все заработало. Отлично, только вопрос, что делать если придется передавать в качестве аргумента тип данных, создать который в 1с нельзя (ну или как выше создать можно, но только в объектной модели вебсервиса)?

О сколько нам открытий чудных готовит просвещенья дух..

Готов к конструктивной и не очень критике)
2 Cyberhawk
 
14.10.15
14:56
Импортировать WSDL-описание в конфигурацию - не айс. Не будешь же ты каждый раз при изменении этого описания обновлять конфигурацию. Лучше используй создание WS-определения по веб-адресу файла с WSDL-описанием
3 Гёдза
 
14.10.15
15:19
(2) зато можно структуру типов посмотреть
4 Cyberhawk
 
14.10.15
15:43
(3) Нуу... ты, наверное, имел в виду _в удобном виде_ посмотреть (и без лишних телодвижений). Если конфу не жалко снимать с замка (или иметь под рукой отдельную для этого дела) - не спорю.
Но также есть и всевозможные xml-просмотрщики, помогающие с просмотром структуры.
Да и в отладке щелкать по "плюсикам" объектов XDTO никто не отменял :)
5 magicSan
 
14.10.15
15:49
Тип то какой был?
6 magicSan
 
14.10.15
15:53
ты параметр смотри как у функции называется и его ищи