При организации удаленной работы с мобильными приложениями 1С (например, мобильным клиентом или приложением «1С:Управление нашей фирмой») системные администраторы часто сталкиваются с ситуацией, когда обычный веб-клиент в браузере работает без нареканий, а мобильное приложение выдает ошибку вида:
Ошибка при вызове метода контекста {ОтправитьПакетОбменаВСервис} - При вызове веб-сервиса произошла ошибка... HTTP Status 404 Not Found
При этом в тексте ошибки видно, что запрос отправляется не на опубликованный IIS или Apache внутри локальной сети, а на веб-сервер внешнего хоста (шлюза), теряя указанный при подключении нестандартный порт. Проанализируем, почему это происходит и как правильно настроить сетевую инфраструктуру.
Разберем детально механизм взаимодействия мобильного приложения с платформой «1С:Предприятие»:
внешний_IP:7772 -> локальный_IP:80 работает стабильно.MobileService). На первом этапе мобильное устройство успешно запрашивает WSDL-описание сервиса по указанному адресу с внешним портом.soap:address location="...", указывающий абсолютный URL, куда клиент обязан отправлять вызовы методов (например, ОтправитьПакетОбменаВСервис). Веб-сервер (IIS или Apache) передает платформе 1С свой локальный номер порта (внутренний 80-й порт).Рассмотрим самый простой способ обойти проблему генерации адреса в WSDL. Если мы используем один и тот же номер порта снаружи и внутри сети, веб-сервер передаст модулю 1С правильный порт, и он попадет в WSDL-схему.
Разберем по шагам настройку на примере IIS:
7772) или изменим существующую.7772 перенаправлялся на внутренний порт 7772 виртуальной машины (симметричная трансляция 1 к 1).После этого при запросе WSDL платформа 1С увидит локальный порт 7772, включит его в адрес soap:address location, и мобильное приложение сможет успешно выполнять обмен.
Если на внешнем хосте уже запущен веб-сервер (например, Apache на Ubuntu), оптимальным архитектурным решением будет использование его в качестве обратного прокси-сервера (Reverse Proxy). В этом случае отпадает необходимость открывать нестандартные порты наружу.
Проанализируем конфигурацию Apache на хосте:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo systemctl restart apache2
<VirtualHost *:80>
ServerName erp.example.com
ProxyPreserveHost On
ProxyPass /test_unf1/ http://192.168.1.50/test_unf1/
ProxyPassReverse /test_unf1/ http://192.168.1.50/test_unf1/
</VirtualHost>
Директива ProxyPreserveHost On передает оригинальный заголовок хоста во внутренний IIS, что позволяет платформе 1С корректно сформировать пути для мобильного клиента.
Для мобильных приложений настоятельно рекомендуется использовать защищенное соединение. Поскольку порт 443 является стандартным для HTTPS, при его использовании порт не подставляется в URL, что полностью исключает конфликты трансляции адресов.
Разберем схему настройки:
https://server.domain.ru/test_unf1 без указания портов.В результате мобильное приложение работает по безопасному каналу, а модуль веб-сервисов 1С формирует корректные конечные точки без потери портов.