Как исправить ошибку 404 при подключении к web-сервису 1С и настроить обмен данными?

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

При разработке мобильных приложений или интеграции различных информационных систем на базе 1С программисты часто сталкиваются с тем, что web-сервис, который вчера еще работал или был настроен предшественником, внезапно перестает отвечать. Самая частая проблема в такой ситуации — ошибка «Код ответа сервера: 404 (Not Found)» при попытке инициализации WSОпределения. Это означает, что веб-сервер (Apache или IIS) не может найти ресурс по указанному адресу.

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

Анализируем структуру URL-адреса web-сервиса

Первым делом проанализируем строку подключения, которую мы используем в коде 1С. Стандартный путь к описанию web-сервиса (WSDL) выглядит следующим образом:

http://[IP-адрес или ИмяСервера]/[ИмяПубликации]/ws/[ИмяСервиса].1cws?wsdl

Разберем типичную ошибку из практики. Если в коде прописано:


Адрес = "http://localhost/WebServer/ws/ws1.1cws?wsdl";
Определения = Новый WSОпределения(Адрес);

Здесь WebServer — это часто просто заглушка или имя, оставшееся от примеров из документации. Выясним причину ошибки: если при публикации базы в диалоговом окне «Публикация на веб-сервере» в поле «Имя» было указано, например, copyUT, то и в адресе должно стоять именно оно. Рассмотрим правильный вариант:

Адрес = "http://localhost/copyUT/ws/ws1.1cws?wsdl";

Важное замечание: использование localhost допустимо только в том случае, если код выполняется непосредственно на том же сервере, где установлен веб-сервер. Если же мы подключаемся с мобильного телефона, localhost будет указывать на само мобильное устройство, где веб-сервера 1С, естественно, нет. В этом случае вместо него нужно прописать статический IP-адрес сервера в локальной сети или его внешний IP.

Проверка публикации через браузер

Прежде чем отлаживать код в 1С, проверим доступность сервиса через обычный браузер. Это поможет нам исключить ошибки в программном коде и сосредоточиться на настройках сервера. Вставим наш сформированный URL в адресную строку браузера.

  1. Если браузер выдает «It works!» — это значит, что сам Apache запущен, но он ничего не знает о вашей базе 1С.
  2. Если браузер выдает ошибку 404 — проверьте правильность написания имени папки публикации (регистр важен для Linux-систем).
  3. Если браузер запрашивает логин и пароль — поздравляем, публикация работает корректно!
  4. Если после ввода пароля вы видите XML-структуру (текст с тегами <definitions>) — значит, WSDL-описание доступно и проблема кроется в параметрах подключения в коде.

Настройка файла публикации default.vrd

Иногда имя базы указано верно, но сервис все равно недоступен. Разберем ситуацию, когда публикация была выполнена не полностью. Все настройки взаимодействия 1С с веб-сервером хранятся в специальном файле default.vrd, который находится в каталоге публикации на сервере.

Убедимся, что в этом файле прописаны наши сервисы. Откроем его любым текстовым редактором и проверим наличие секции <ws>. Если вы хотите публиковать все имеющиеся в конфигурации web-сервисы, убедитесь, что в теге <publish> установлен соответствующий признак:


<standardURLs>
    <res>true</res>
    <ws publishByDefault="true" />
</standardURLs>

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


<ws>
    <service name="МойВебСервис" alias="ws1.1cws" />
</ws>

Особенности авторизации при создании WSОпределения

Как только мы избавились от ошибки 404, система может потребовать авторизацию. Посмотрим на пример кода, который позволяет передать учетные данные программно, чтобы мобильное приложение не запрашивало их у пользователя каждый раз при обращении к серверу:


ИмяПользователя = "WSUser";
Пароль = "ComplexPassword123";
Таймаут = 30; // Секунды

Попытка
    Определения = Новый WSОпределения(Адрес, ИмяПользователя, Пароль, Таймаут);
    // Далее создаем прокси и вызываем методы
    Прокси = Новый WSПрокси(Определения, "http://www.my-namespace.org", "MyService", "MyServiceSoap");
    Прокси.Пользователь = ИмяПользователя;
    Прокси.Пароль = Пароль;
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Рекомендация: создайте в 1С отдельного пользователя специально для работы веб-сервисов. У этого пользователя должна быть роль, в которой разрешено право Использование Side-by-side и даны права на конкретный используемый Web-сервис.

Технические нюансы Apache и платформы 1С

Выясним технические причины, по которым публикация может вести себя нестабильно на сервере Apache 2.4:

Настройка доступа для мобильных устройств

Если мы разрабатываем мобильное приложение, важно помнить о сетевых экранах. Проанализируем ситуацию: на самом сервере всё открывается, а с телефона — нет.

Во-первых, проверим Brandmauer (Firewall) Windows. По умолчанию порт 80 (HTTP) может быть закрыт для входящих соединений. Необходимо создать разрешающее правило для входящего трафика по этому порту.

Во-вторых, современные мобильные платформы (Android и iOS) крайне неохотно работают с незащищенным протоколом http. Рассмотрим шаги для обеспечения стабильной работы:

  1. Настройте использование https с SSL-сертификатом (можно использовать бесплатный Let's Encrypt).
  2. Если используется локальная сеть Wi-Fi, убедитесь, что телефон находится в той же подсети, что и сервер, и они «пингуют» друг друга.
  3. Если доступ идет через интернет, на роутере должен быть настроен Port Forwarding (проброс портов) с внешнего IP на локальный IP сервера 1С.

Таким образом, решение проблемы 404 сводится к внимательной проверке имени публикации, корректной настройке веб-сервера и обеспечению прав доступа для пользователя 1С. Следуя этим шагам, мы сможем построить надежную систему обмена данными между мобильными устройствами и центральной базой.

← На главную