Почему веб-сервис 1С на веб-сервере Apache возвращает ошибку Not Found при обращении к WSDL?

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

При публикации веб-сервисов 1С:Предприятия на веб-сервере Apache разработчики часто сталкиваются с ситуацией, когда публикация завершена без явных ошибок, но при попытке открыть WSDL-описание сервиса по ссылке вида http://localhost/testService/ws/testService.1cws?wsdl браузер выдает ошибку 404 Not Found. При этом прямое обращение к файлу дескриптора http://localhost/testService/default.vrd отображает его XML-содержимое или инициирует скачивание файла.

Разберем по шагам, почему возникает эта проблема, как функционирует связка Apache и платформы 1С и как правильно настроить публикацию веб-сервиса.

Анализ механизма работы веб-сервисов 1С на веб-сервере Apache

Для корректной обработки запросов к базам 1С веб-сервер Apache использует специальный модуль расширения платформы (для Apache 2.2 это библиотека wsap22.dll, для Apache 2.4 — wsap24.dll). Когда модуль загружен и настроен обработчик SetHandler 1c-application, все запросы к виртуальному каталогу публикации передаются на исполнение платформе 1С.

Если при прямом обращении к default.vrd в браузере отображается XML-структура файла, это главный признак того, что веб-сервер Apache работает с каталогом как с обычной папкой статических файлов, а модуль 1С не перехватывает и не обрабатывает входящие запросы. Из-за этого запросы к виртуальным точкам входа вроде /ws/testService.1cws?wsdl не находят физического файла на диске и возвращают ошибку Not Found.

Шаг 1. Проверяем подключение модуля 1С в конфигурации Apache

Рассмотрим файл конфигурации веб-сервера httpd.conf. В нем должны присутствовать две обязательные составляющие:

  1. Директива загрузки модуля LoadModule, расположенная в глобальной секции конфигурации.
  2. Директива публикации конкретной информационной базы через секцию <Directory>.

Проверим наличие строки загрузки модуля в httpd.conf:


# Загрузка модуля интеграции с 1С:Предприятием
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.XX.XXXX/bin/wsap22.dll"

Затем убедимся в корректности описания виртуального каталога:


# 1c publication
Alias "/testService" "C:/server/www/testService/"
<Directory "C:/server/www/testService/">
    AllowOverride All
    Options None
    Order allow,deny
    Allow from all
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/server/www/testService/default.vrd"
</Directory>

Обратим внимание на следующие критические моменты:

  1. Разрядность (битность) компонентов: разрядность установленного Apache (32-bit или 64-bit) должна строго совпадать с разрядностью библиотеки wsap22.dll. 32-разрядный Apache не сможет загрузить модуль из каталога 64-битной платформы 1С.
  2. Перезапуск службы: любые изменения в файле httpd.conf, а также автоматическая публикация из конфигуратора 1С требуют обязательного перезапуска службы Apache (Restart), иначе новые обработчики не вступят в силу.

Шаг 2. Проверяем структуру файла default.vrd

Проанализируем файл дескриптора default.vrd, расположенный в каталоге публикации. В нем объявляются точки входа для веб-сервисов и параметры подключения к информационной базе:


<?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="/testService"
        ib="File="C:\1c_Base\mobile_base";"
        enableStandardOData="true">
    <httpServices publishByDefault="false"/>
    <ws>
        <point name="testService"
                alias="testService.1cws"
                enable="true"/>
    </ws>
</point>

Разберем важные параметры дескриптора:

  1. Экранирование кавычек в строке подключения: атрибут ib содержит параметры строки соединения. Внутренние двойные кавычки пути к базе данных должны быть обязательно экранированы как &quot;. Нарушение XML-синтаксиса приводит к невозможности чтения дескриптора модулем 1С.
  2. Регистр символов (Case Sensitivity): имя сервиса в метаданных конфигурации 1С, атрибут name, атрибут alias и имя в URL браузера должны строго совпадать с учетом регистра символов.
  3. Флаг доступности: атрибут enable для целевого сервиса должен иметь значение "true".

Шаг 3. Настраиваем права доступа учетной записи службы

Служба Apache в операционной системе Windows по умолчанию запускается от имени системной учетной записи SYSTEM (или LOCAL SYSTEM). Для корректного запуска сеанса 1С и генерации WSDL этой учетной записи необходимы права на следующие ресурсы:

  1. Каталог информационной базы: учетная запись службы должна иметь полные права (Full Control: чтение, запись, изменение) на папку с файловой базой (C:\1c_Base\mobile_base).
  2. Каталог публикации: права на чтение файла default.vrd в папке веб-сервера.
  3. Системный каталог временных файлов: права на запись в системный каталог TEMP/TMP для создания служебных файлов блокировок и кэша сеансов 1С.
  4. Каталог bin платформы 1С: права на чтение и выполнение модулей платформы.

Важное замечание: если файловая информационная база расположена на сетевом диске или в сетевой shared-папке, стандартная локальная учетная запись SYSTEM не сможет получить к ней доступ по сети. В таком случае службу Apache необходимо перевести на запуск от имени доменного или выделенного локального пользователя, обладающего сетевыми правами к указанному ресурсу.

Шаг 4. Проверяем настройки объекта «Веб-сервис» в метаданных 1С

Если веб-сервер настроен верно, но WSDL не отдается, убедимся в корректности метаданных в конфигураторе 1С:

  1. В свойствах объекта метаданных Веб-сервис обязательно должно быть заполнено свойство URI пространства имен (Namespace URI).
  2. У веб-сервиса должна быть создана хотя бы одна операция с указанием возвращаемого значения и типа, а в модуле веб-сервиса реализована процедура-обработчик.

Итоговый алгоритм проверки публикации

  1. Убеждаемся, что разрядность Apache совпадает с разрядностью установленной платформы 1С.
  2. Проверяем наличие директивы LoadModule в файле httpd.conf.
  3. Проверяем права доступа учетной записи службы к каталогу с базой 1С.
  4. Выполняем публикацию через конфигуратор (меню Администрирование > Публикация на веб-сервере).
  5. Перезапускаем службу Apache.
  6. Проверяем открытие WSDL по точному URL: http://localhost/testService/ws/testService.1cws?wsdl.
← На главную