Почему возникает ошибка HTTP 404 при обращении к HTTP-сервису 1С на IIS?

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

Ситуация, когда основная информационная база успешно опубликована и доступна через веб-клиент, но при этом HTTP-сервисы (обращения по пути /hs/) выдают ошибку HTTP 404.0 - Not Found, является довольно распространенной при работе с веб-сервером IIS. Давайте детально разберем, почему это происходит, проанализируем внутренние механизмы взаимодействия 1С и IIS и выясним, какие настройки необходимо выполнить, чтобы ваши сервисы "взлетели".

Разберем причину ошибки 404 в контексте HTTP-сервисов

Когда мы обращаемся к информационной базе через браузер, IIS понимает, что запрос относится к 1С, благодаря расширениям файлов или сопоставленным обработчикам. Однако путь /hs/ (HTTP Service) является виртуальным. Ошибка 404 в данном случае часто означает, что веб-сервер IIS не передал запрос модулю расширения 1С (wsisapi.dll), а попытался найти физическую папку или файл с именем hs в каталоге публикации на диске. Поскольку такой папки физически не существует (это логический путь внутри платформы), сервер возвращает стандартный ответ "Ресурс не найден".

Решение 1. Проверка сопоставления сценариев (Handler Mappings)

Проанализируем ключевой этап настройки. Для корректной работы HTTP-сервисов в IIS должно быть настроено так называемое "сопоставление сценариев типа звездочка" (Wildcard Script Map). Рассмотрим, как это сделать по шагам:

  1. Откроем Диспетчер служб IIS.
  2. В дереве соединений выберем нашу опубликованную базу (виртуальный каталог).
  3. В центральной части окна найдем раздел "Сопоставления обработчиков" (Handler Mappings) и зайдем в него.
  4. В правой панели действий выберем "Добавить сопоставление сценария...".
  5. В поле "Путь запроса" введем символ * (звездочка). Это крайне важно, так как именно этот символ заставляет IIS передавать абсолютно все запросы, включая пути /hs/, в модуль 1С.
  6. В поле "Исполняемый файл" укажем путь к библиотеке wsisapi.dll. Обратите внимание, что путь должен соответствовать разрядности и версии вашей платформы. Например: C:\Program Files (x86)\1cv8\8.3.12.xxxx\bin\wsisapi.dll.
  7. В поле "Имя" введем любое понятное название, например, 1C HTTP Service Handler.
  8. Нажмем кнопку "Ограничения запроса" и на вкладке "Сопоставление" снимем галочку "Вызывать обработчик только при сопоставлении запроса с файлом или папкой". Это критический момент: если галочка стоит, IIS будет искать физический файл на диске, что и приводит к 404.

Решение 2. Учет регистрозависимости URL

Выясним еще одну важную деталь: веб-сервер IIS, в отличие от Apache, может быть крайне чувствителен к регистру символов в URL при работе с расширением 1С. Если в вашей конфигурации 1С корневой URL HTTP-сервиса задан как Invoice, а вы обращаетесь к нему по адресу .../hs/invoice (с маленькой буквы), сервер может вернуть ошибку 404.

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

Решение 3. Настройка разрядности пула приложений

Если вы используете 32-разрядную платформу 1С (x86) на 64-битной операционной системе Windows, ваш HTTP-сервис не будет работать, пока вы не разрешите выполнение 32-битных приложений в настройках IIS. Разберем, как это настроить:

  1. В Диспетчере IIS перейдем в раздел "Пулы приложений" (Application Pools).
  2. Найдем пул, который обслуживает вашу базу (обычно это DefaultAppPool или пул с именем вашей базы).
  3. Нажмем правой кнопкой мыши и выберем "Дополнительные параметры...".
  4. В строке "Разрешены 32-разрядные приложения" (Enable 32-Bit Applications) установим значение True.
  5. Перезапустим пул приложений и сам сайт.

Решение 4. Удаление модуля WebDAV

Одной из самых коварных причин блокировки HTTP-запросов (особенно методов POST, PUT, DELETE) является установленный компонент WebDAV Publishing. Он перехватывает запросы к расширениям и часто мешает работе 1С. Рассмотрим, как его отключить:

Посмотрим в раздел "Модули" вашего сайта в IIS. Если в списке присутствует WebDAVModule, его необходимо удалить. Также проверьте раздел "Правила фильтрации запросов" — там не должно быть запретов на используемые вами глаголы HTTP.

Решение 5. Структура файла default.vrd и анонимный доступ

Иногда проблема кроется в самом файле публикации default.vrd. Проанализируем его содержимое. Для работы HTTP-сервисов в нем должна быть соответствующая секция. Откройте файл (он лежит в физической папке публикации) текстовым редактором и проверьте наличие следующего блока:


<httpServices>
    <service name="ИмяВашегоСервиса" rootUrl="invoice" enable="true"/>
</httpServices>

Если вы хотите реализовать доступ к сервису без постоянного ввода логина и пароля (анонимно), вы можете прописать данные пользователя прямо в строке соединения файла default.vrd. Однако помните, что это снижает безопасность. Пример строки соединения:

ib="Srvr="ServerName";Ref="BaseName";usr="WebUser";pwd="Password";"

Здесь WebUser — это имя пользователя в базе 1С, под которым будут выполняться запросы. У этого пользователя должны быть достаточные права для выполнения кода вашего HTTP-сервиса.

Решение 6. Права доступа к папкам

Не забудем проверить права доступа. Пользователь, от имени которого запущен пул приложений (обычно это IIS AppPool\DefaultAppPool или IUSR), должен иметь права "Чтение и выполнение" на:

Если прав недостаточно, IIS может вернуть 401 или 404 ошибку, так как не сможет инициализировать библиотеку wsisapi.dll.

Итоги настройки

Подводя итог, можно сказать, что "оживление" HTTP-сервиса на IIS требует комплексного подхода. Мы с вами разобрали, что чаще всего проблема решается правильной настройкой Handler Mappings с использованием пути * и отключением фильтрации по физическим файлам. Не забывайте также про разрядность wsisapi.dll и соответствие настроек пула приложений. После выполнения всех настроек обязательно выполните команду iisreset в командной строке для применения изменений.

← На главную