|
Не могу подключиться к 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
|
ты параметр смотри как у функции называется и его ищи
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |