Как исправить ошибку 404 и настроить авторизацию при совместной публикации УТ 11 и мобильного приложения 1С на Apache

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

Разработка мобильных приложений на платформе 1С в связке с центральной базой (например, 1С:Управление торговлей) — задача крайне интересная, но часто сопряженная с трудностями на этапе первой настройки сетевого взаимодействия. Начинающие разработчики регулярно сталкиваются с ситуацией, когда мобильный клиент выдает ошибку "Файл не обнаружен (404)" при запуске или ругается на неудачную авторизацию при попытке вызвать опубликованный веб-сервис.

В этой статье мы подробно разберем, почему возникают подобные конфликты при публикации баз на веб-сервере Apache, как правильно организовать структуру каталогов, настроить динамическое подключение к веб-сервисам через WSПрокси и решить проблемы эмуляции мобильных устройств.

Разделение каталогов публикации: Устранение конфликта файлов манифеста

Самая распространенная ошибка при одновременной работе с центральной базой и мобильным приложением — это выполнение публикации обеих конфигураций в один и тот же физический каталог на диске компьютера (например, в стандартную папку веб-сервера C:\Program Files\Apache24\htdocs\mybase).

Давайте проанализируем, почему это приводит к критическому конфликту:

  1. При публикации центральной базы (в нашем случае УТ 11) платформа 1С создает в целевой папке файл описания публикации default.vrd. Этот файл содержит структуру подключения, пути к базе данных, а также правила перенаправления запросов к HTTP- и Web-сервисам (таким как наш веб-сервис MobileCentral).
  2. При публикации мобильного приложения в эту же папку платформа генерирует файлы манифеста и структуры конфигурации: 1cema.xml и 1cemarun.xml.
  3. Если обе публикации выполняются в один каталог, конфигуратор 1С при перезаписи файлов начинает путаться в адресациях. Более того, веб-сервер Apache не может корректно сопоставить один виртуальный URL с абсолютно разными задачами подключения (веб-клиент УТ 11 и раздача мобильного приложения). В итоге мы получаем ошибку 404 при попытке мобильного приложения обратиться к файлу манифеста.

Решение проблемы: Каждую конфигурацию необходимо публиковать в собственную, изолированную физическую папку и настраивать для них разные виртуальные пути (алиасы) на веб-сервере Apache. Создадим две папки:

При публикации в конфигураторе УТ 11 мы указываем имя публикации, например, UT11, и путь к первой папке. При публикации мобильного приложения из его конфигуратора указываем имя MobileApp и путь ко второй папке. Теперь их файлы конфигурации (включая default.vrd) не будут перезаписывать друг друга, а веб-сервер сможет четко маршрутизировать запросы.

Динамическое создание WS-прокси и обход ошибок авторизации

Вторая проблема, с которой сталкивается разработчик после исправления путей публикации, — ошибка "Аутентификация пользователя не выполнена" при вызове веб-сервиса. Попытка использовать статическую WSСсылка, добавленную непосредственно в метаданные мобильного приложения, часто приводит к неудачам, так как параметры авторизации жестко фиксируются или передаются некорректно.

Рассмотрим более гибкий и профессиональный подход — динамическое создание веб-сервиса в коде мобильного приложения с помощью объектов WSОпределения и WSПрокси. Этот метод позволяет передавать логин и пароль пользователя непосредственно в момент обращения.

Проанализируем процесс авторизации. Он всегда проходит в два этапа:

  1. Получение WSDL-схемы (описания сервиса): Для этого система отправляет GET-запрос к веб-серверу. Нам необходимо передать учетные данные пользователя базы УТ 11 в конструктор объекта WSОпределения.
  2. Вызов метода сервиса (выполнение операции): Платформа выполняет POST-запрос с XML-пакетом. На этом этапе авторизационные данные должны быть явно переданы свойствам объекта 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: " + Данные);
    
Исключение
    Сообщить("Произошла ошибка взаимодействия с сервисом:");
    Сообщить(ОписаниеОшибки());
КонецПопытки;

Особенности сетевой настройки в эмуляторе NoxPlayer

Если код написан верно, но мобильное приложение в эмуляторе все равно выдает ошибку работы с Интернет, нам следует проверить сетевые настройки самого эмулятора. При разработке важно помнить специфику виртуализации:

Устранение остаточных ошибок 404 при старте приложения

Иногда даже после разделения каталогов публикации мобильный клиент на эмуляторе при запуске продолжает выдавать предупреждение: "Файл не обнаружен... Ошибка работы с Интернет: (404)". При этом, если нажать кнопку "ОК", приложение успешно открывается и работает.

Выясним причину этого поведения. Мобильная платформа разработчика 1С при каждом запуске пытается связаться с веб-сервером автоматического обновления, чтобы проверить, не обновилась ли конфигурация в конфигураторе. Если вы ранее запускали базу по старому ("конфликтному") адресу, мобильная платформа сохранила его в кэше и пытается стучаться по старым путям, где манифеста 1cema.xml уже нет.

Выполним следующие шаги для исправления:

  1. Запустите мобильную платформу на эмуляторе до открытия самой базы (выйдите в список информационных баз).
  2. Откройте свойства вашей мобильной базы.
  3. Проверьте поле "Адрес" (URL). Убедитесь, что там прописан новый правильный путь к публикации мобильного приложения (например, http://192.168.1.150/MobileApp), а не путь к УТ 11 или старый совмещенный каталог.
  4. Если автоматическое обновление при каждом запуске вам не требуется, в свойствах подключения можно отключить опцию "Перезагружать из конфигуратора" (или аналогичную настройку автоматического обновления).

Разделение папок публикации, использование динамического конструирования WSПрокси с явным указанием авторизационных данных и правильная адресация сетевых запросов в эмуляторе гарантируют стабильную и быструю работу вашего мобильного решения с центральной базой 1С.

← На главную