Почему веб-сервис 1С выдает ошибку 404 при публикации на Apache и как это исправить?

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

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

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

Анализируем содержимое файла default.vrd

Первым делом при возникновении ошибки 404 необходимо проверить файл дескриптора публикации — default.vrd. Этот XML-файл находится в каталоге, который вы указали при публикации базы в Конфигураторе. Именно он сообщает веб-серверу Apache, какие именно ресурсы (веб-сервисы, HTTP-сервисы, отчеты) доступны для внешней обработки.

Рассмотрим пример проблемного файла, который часто получается при ручной правке или некорректном сохранении настроек в Конфигураторе:


<?xml version="1.0" encoding="UTF-8"?>
<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="/allproductlist"
        ib="Srvr='SRV1C';Ref='Anbar';"
        enable="false">
    <ws>
        <point name="AllProductList"
                alias="allproductlist.1cws"
                enable="true"/>
    </ws>
</point>

Проанализируем этот код. Обратите внимание на атрибут enable="false" в корневом теге point. Это критическая ошибка. Если основной узел публикации выключен, то Apache полностью игнорирует все вложенные настройки, включая веб-сервисы, даже если у них самих стоит enable="true". Для исправления ситуации необходимо вручную или через диалог публикации установить значение true для всей точки подключения.

Проверяем настройки публикации в Конфигураторе

Часто программисты забывают проверить состав публикуемых сервисов. В окне «Публикация на веб-сервере» на закладке «Веб-сервисы» должен быть выполнен ряд условий:

  1. Установлен флаг «Публиковать веб-сервисы» — это глобальный переключатель для всей базы.
  2. Выбраны конкретные сервисы — в списке ниже должны стоять галочки напротив тех объектов метаданных, к которым вы планируете обращаться.
  3. Проверка имен и синонимов — убедитесь, что имя сервиса не содержит кириллицы или спецсимволов, которые могут некорректно интерпретироваться веб-сервером.

После внесения изменений обязательно нажмите кнопку «Опубликовать». 1С перезапишет файл default.vrd, приведя его структуру в соответствие с вашими настройками.

Регистрозависимость и структура URL

Веб-сервер Apache крайне чувствителен к регистру символов. Если ваш веб-сервис в метаданных называется AllProductList, а вы пытаетесь обратиться к нему по адресу, где все буквы строчные, вы гарантированно получите ошибку 404.

Рассмотрим правильную структуру строки подключения к WSDL:

http://[адрес_сервера]/[имя_публикации]/ws/[имя_сервиса].1cws?wsdl

Разберем по шагам:

Если в 1С сервис назван AllProductList, то и в ссылке он должен быть AllProductList.1cws. Попытка использовать allproductlist.1cws (в нижнем регистре) часто приводит к неудаче, особенно если сервер настроен строго.

Конфликты имен и очистка конфигурации Apache

Выясним причину, по которой переименование публикации помогает решить проблему. Когда вы выполняете публикацию под старым именем (например, allproductlist), Apache может использовать закэшированные или старые записи в своем конфигурационном файле httpd.conf. Кроме того, если в каталоге htdocs веб-сервера уже существует папка с таким же именем, Apache может попытаться найти в ней физический файл вместо того, чтобы передать управление модулю расширения 1С.

При смене имени на новое (например, anbarreport) происходят следующие процессы:

  1. Создается новая виртуальная директория в настройках Apache.
  2. 1С генерирует «чистый» файл default.vrd, где все флаги enable по умолчанию установлены в значение true.
  3. Сбрасываются возможные конфликты прав доступа к папке на уровне операционной системы.

Рестарт веб-сервера

Не стоит забывать о необходимости перезагрузки службы Apache после каждой публикации или изменения файла конфигурации. Хотя 1С пытается подать сигнал серверу о необходимости перечитать настройки, в случае со сложными конфигурациями или использованием нескольких баз (как в нашей ситуации с БП 2.0 и УТ 10.3), надежнее сделать это вручную через оснастку «Службы» или монитор Apache.

Порядок действий для исправления ошибки 404:

  1. Откройте Конфигуратор той базы, сервис которой не работает.
  2. Перейдите в меню «Администрирование» — «Публикация на веб-сервере».
  3. Измените имя публикации на новое (не содержащее цифр в начале и спецсимволов).
  4. Убедитесь, что на вкладке «Веб-сервисы» выбраны нужные объекты.
  5. Нажмите «Опубликовать» и подтвердите перезапуск веб-сервера.
  6. Проверьте доступность WSDL по новой ссылке в браузере.

Подводя итог, можно сказать, что ошибка 404 чаще всего является следствием невнимательности к деталям: выключенный флаг enable в XML-файле, несоблюдение регистра в URL или конфликт имен в конфигурации Apache. Системный подход к проверке этих параметров позволяет быстро восстановить работоспособность обмена данными.

← На главную