При разработке мобильных приложений на Android, взаимодействующих с 1С через SOAP-сервисы, разработчики часто сталкиваются с двумя проблемами: приложение выдает ошибку org.xmlpull.v1.xmlpullparserexception: expected: start_tag, а конфигуратор 1С «не ловит» точки остановки в коде веб-сервиса. Разберем пошагово, как проанализировать эти ошибки, настроить среду и добиться стабильной работы обмена данными.
Ошибка expected: start_tag при использовании библиотеки ksoap2 в Android-приложении чаще всего означает, что парсер ожидал увидеть начало XML-пакета (например, тег конверта SOAP), но вместо этого получил что-то другое. Проанализируем основные причины этой ситуации:
DOCTYPE html и прерывает работу.Чтобы выяснить реальное содержимое ответа, проанализируем ситуацию с помощью сторонних инструментов. Рекомендуется использовать HTTP-прокси (например, Fiddler или Charles). Установив прокси между мобильным устройством и сервером 1С, мы сможем увидеть «сырой» (Raw) ответ сервера и понять, возвращается ли там SOAP-конверт или HTML-текст ошибки.
Обычная отладка по протоколу TCP часто не видит сеансы веб-сервисов, так как они создаются динамически и существуют очень короткое время. Разберем, как грамотно настроить систему для отладки кода внутри 1С.
Шаг 1: Переход на отладку по протоколу HTTP.
Для надежной отладки веб-сервисов необходимо перевести сервер 1С и Конфигуратор на использование HTTP-протокола отладки. В настройках параметров (Сервис — Параметры — Отладка) выберем «Использовать протокол HTTP» и укажем адрес локального сервера отладки.
Шаг 2: Настройка файла публикации default.vrd.
Проверим файл публикации веб-сервиса. Для включения возможности отладки в файле default.vrd должны присутствовать соответствующие параметры. Рассмотрим пример структуры:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/MyService"
ib="ConnectString">
<ws debug="true" debuggerURL="http://localhost/debugserver"/>
</point>
Здесь параметр debug="true" разрешает отладку, а debuggerURL указывает адрес, по которому сервер должен обращаться к отладчику.
Шаг 3: Автоподключение предметов отладки.
В конфигураторе откроем окно «Параметры отладки» и убедимся, что включено автоматическое подключение для типов «Сеансы веб-сервисов». Поскольку сеанс живет доли секунды, ручное подключение практически невозможно.
Если точки остановки все равно не срабатывают, нам нужно убедиться, что запрос вообще доходит до метода 1С. Для этого используем метод ЗаписатьЖурналРегистрации. Разберем пример реализации внутри метода веб-сервиса:
Функция ВыполнитьОбмен(ДанныеПакета)
ЗаписатьЖурналРегистрации("Web-сервис.Обмен",
УровеньЖурналаРегистрации.Информация, , ,
"Запрос принят. Содержимое: " + ДанныеПакета);
Попытка
// Основная логика обработки
Возврат "Успех";
Исключение
ТекстОшибки = ОписаниеОшибки();
ЗаписатьЖурналРегистрации("Web-сервис.Ошибка",
УровеньЖурналаРегистрации.Ошибка, , ,
ТекстОшибки);
Возврат ТекстОшибки;
КонецПопытки;
КонецФункции
Если после вызова из Android в Журнале регистрации не появляется запись, значит проблема на уровне веб-сервера (IIS/Apache) или настроек публикации, и запрос просто не передается в 1С.
Проанализируем структуру передаваемых данных. Протокол SOAP требователен к типам XDTO. Любое расхождение в пространстве имен (Namespace) или структуре пакета приведет к ошибке десериализации.
Советы по повышению стабильности:
XDTO-пакетов.Таким образом, решив проблему с форматом ответа сервера и настроив HTTP-отладку с записью в Журнал регистрации, мы получим полный контроль над взаимодействием мобильного приложения и базы 1С.