Разработка мобильных приложений на платформе 1С в связке с центральной базой (например, 1С:Управление торговлей) — задача крайне интересная, но часто сопряженная с трудностями на этапе первой настройки сетевого взаимодействия. Начинающие разработчики регулярно сталкиваются с ситуацией, когда мобильный клиент выдает ошибку "Файл не обнаружен (404)" при запуске или ругается на неудачную авторизацию при попытке вызвать опубликованный веб-сервис.
В этой статье мы подробно разберем, почему возникают подобные конфликты при публикации баз на веб-сервере Apache, как правильно организовать структуру каталогов, настроить динамическое подключение к веб-сервисам через WSПрокси и решить проблемы эмуляции мобильных устройств.
Самая распространенная ошибка при одновременной работе с центральной базой и мобильным приложением — это выполнение публикации обеих конфигураций в один и тот же физический каталог на диске компьютера (например, в стандартную папку веб-сервера C:\Program Files\Apache24\htdocs\mybase).
Давайте проанализируем, почему это приводит к критическому конфликту:
default.vrd. Этот файл содержит структуру подключения, пути к базе данных, а также правила перенаправления запросов к HTTP- и Web-сервисам (таким как наш веб-сервис MobileCentral).1cema.xml и 1cemarun.xml.Решение проблемы: Каждую конфигурацию необходимо публиковать в собственную, изолированную физическую папку и настраивать для них разные виртуальные пути (алиасы) на веб-сервере Apache. Создадим две папки:
C:\inetpub\wwwroot\UT11C:\inetpub\wwwroot\MobileAppПри публикации в конфигураторе УТ 11 мы указываем имя публикации, например, UT11, и путь к первой папке. При публикации мобильного приложения из его конфигуратора указываем имя MobileApp и путь ко второй папке. Теперь их файлы конфигурации (включая default.vrd) не будут перезаписывать друг друга, а веб-сервер сможет четко маршрутизировать запросы.
Вторая проблема, с которой сталкивается разработчик после исправления путей публикации, — ошибка "Аутентификация пользователя не выполнена" при вызове веб-сервиса. Попытка использовать статическую WSСсылка, добавленную непосредственно в метаданные мобильного приложения, часто приводит к неудачам, так как параметры авторизации жестко фиксируются или передаются некорректно.
Рассмотрим более гибкий и профессиональный подход — динамическое создание веб-сервиса в коде мобильного приложения с помощью объектов WSОпределения и WSПрокси. Этот метод позволяет передавать логин и пароль пользователя непосредственно в момент обращения.
Проанализируем процесс авторизации. Он всегда проходит в два этапа:
WSОпределения.WSПрокси.Посмотрим на пример кода, который необходимо прописать в модуле команды мобильного приложения вместо статического вызова:
МестоположениеWSDL = "http://[IP-адрес_вашего_компьютера]/UT11/ws/MobileCentral?wsdl";
ИмяПользователя = "Администратор";
Пароль = "ВашПароль";
// URI пространства имен можно посмотреть в свойствах вашего Веб-сервиса в конфигураторе УТ 11
URIПространстваИменСервиса = "http://www.URI_вашего_сервиса.ru";
ИмяСервиса = "MobileCentral";
Попытка
// Инициализируем защищенное соединение (если используется HTTPS)
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
// Шаг 1: Получаем описание веб-сервиса (WSDL) с авторизацией
ВСОпределение = Новый WSОпределения(МестоположениеWSDL, ИмяПользователя, Пароль, , , ЗащищенноеСоединение);
// Шаг 2: Создаем прокси-объект для вызова методов
ВСПрокси = Новый WSПрокси(ВСОпределение, URIПространстваИменСервиса, ИмяСервиса, ИмяСервиса + "Soap");
// Обязательно дублируем авторизацию для выполнения самих операций веб-сервиса
ВСПрокси.Пользователь = ИмяПользователя;
ВСПрокси.Пароль = Пароль;
// Вызываем нашу функцию веб-сервиса
Данные = ВСПрокси.SendMassage();
Сообщить("Успешный ответ от УТ 11: " + Данные);
Исключение
Сообщить("Произошла ошибка взаимодействия с сервисом:");
Сообщить(ОписаниеОшибки());
КонецПопытки;
Если код написан верно, но мобильное приложение в эмуляторе все равно выдает ошибку работы с Интернет, нам следует проверить сетевые настройки самого эмулятора. При разработке важно помнить специфику виртуализации:
localhost или 127.0.0.1 в коде мобильного приложения приведет к ошибке. Для операционной системы Android внутри эмулятора "локалхостом" является сам эмулятор, а не ваш рабочий компьютер, на котором запущен Apache.МестоположениеWSDL необходимо указывать реальный локальный IP-адрес хост-компьютера в вашей локальной сети (например, 192.168.1.150).Иногда даже после разделения каталогов публикации мобильный клиент на эмуляторе при запуске продолжает выдавать предупреждение: "Файл не обнаружен... Ошибка работы с Интернет: (404)". При этом, если нажать кнопку "ОК", приложение успешно открывается и работает.
Выясним причину этого поведения. Мобильная платформа разработчика 1С при каждом запуске пытается связаться с веб-сервером автоматического обновления, чтобы проверить, не обновилась ли конфигурация в конфигураторе. Если вы ранее запускали базу по старому ("конфликтному") адресу, мобильная платформа сохранила его в кэше и пытается стучаться по старым путям, где манифеста 1cema.xml уже нет.
Выполним следующие шаги для исправления:
http://192.168.1.150/MobileApp), а не путь к УТ 11 или старый совмещенный каталог.Разделение папок публикации, использование динамического конструирования WSПрокси с явным указанием авторизационных данных и правильная адресация сетевых запросов в эмуляторе гарантируют стабильную и быструю работу вашего мобильного решения с центральной базой 1С.