При разработке и публикации HTTP-сервисов в экосистеме 1С:Предприятие программисты часто сталкиваются с ситуацией, когда база данных успешно открывается через веб-клиент, SOAP-сервисы (WS) работают исправно, но при обращении к HTTP-сервису (HS) сервер возвращает досадную ошибку 404 (Not Found). Это создает впечатление, что сервис просто не существует в папке публикации, хотя в конфигураторе он описан, а в окне публикации отмечен галочкой.
В рамках данной статьи мы подробно разберем причины возникновения этой ошибки, проанализируем влияние настроек веб-серверов IIS и Apache, изучим структуру файла публикации и выясним, почему регистр букв в URL может играть решающую роль.
Как показывает практика и опыт многих разработчиков, одной из самых неочевидных причин ошибки 404 является использование заглавных (прописных) букв в именах сервиса или его корневых URL. Рассмотрим ситуацию: вы создали сервис с именем EmployeeData, используя конструктор API и корневым URL Employee. При обращении по адресу .../hs/Employee сервер может выдать 404.
Решение: Проанализируем настройки сервиса в конфигураторе. Нам необходимо изменить все названия на строчные (маленькие) буквы. Попробуем переименовать корневой URL в employee и метод в getdata. После этого необходимо заново опубликовать базу. Как отмечают пользователи, именно приведение всех составляющих пути к нижнему регистру зачастую мгновенно решает проблему на современных версиях IIS (особенно на IIS 10 в Windows Server 2019), что упрощает последующую настройку Swagger.
Когда мы публикуем решение на веб-сервере, 1С создает специальный файл конфигурации default.vrd. Если HTTP-сервис не прописан в этом файле или прописан некорректно, веб-сервер не поймет, что запрос нужно передать модулю расширения 1С. Проанализируем содержимое этого файла, который обычно находится в папке с публикацией (например, C:\inetpub\wwwroot\ваша_база\).
Найдем секцию <httpServices>. В ней обязательно должен присутствовать ваш сервис. Пример правильной записи:
<httpServices>
<service name="ИмяВашегоСервиса" rootUrl="employee" enable="true" reuseSessions="autouse" />
</httpServices>
Обратите внимание на параметр enable="true". Если он установлен в false или секция вовсе отсутствует, сервис будет недоступен. Рекомендуется также проверить наличие файла web.config в этой же папке (для IIS), который отвечает за перенаправление запросов.
Иногда ошибка 404 возникает не из-за сервера, а из-за неверно сформированной строки запроса в коде 1С или в адресной строке браузера. Рассмотрим распространенную ошибку при использовании объекта HTTPЗапрос. Выясним причину: часто разработчики ошибочно включают адрес сервера в путь запроса.
Неправильно:
МойСайт = "http://localhost/base_name";
HTTPЗапрос = Новый HTTPЗапрос(МойСайт + "/hs/api/v1/get_list");
В данном случае система попытается найти ресурс по адресу, где localhost будет дублироваться или интерпретироваться неверно. Правильный подход заключается в разделении адреса сервера и относительного пути:
Соединение = Новый HTTPСоединение("localhost"); // Здесь только хост
ПутьКСервису = "/base_name/hs/employee/v1/all";
Запрос = Новый HTTPЗапрос(ПутьКСервису);
Ответ = Соединение.Получить(Запрос);
Если вышеуказанные действия не помогли, нам стоит углубиться в настройки самого Internet Information Services (IIS). Проблема может заключаться в том, что IIS пытается найти физическую папку /hs/ в каталоге публикации, не находя её, выдает 404, так как не знает, что этот путь должен обрабатываться библиотекой 1С (wsap24.dll).
Разберем шаги по настройке обработчиков:
hs/*, указав путь к расширению веб-сервера 1С (библиотека в папке bin установленной платформы).Также важно проверить раздел "Ограничения ISAPI и CGI" на уровне всего сервера. Если используемой версии wsap24.dll нет в списке разрешенных, запросы будут блокироваться сервером с кодом 404 или 403.
Рассмотрим технический нюанс: несовпадение разрядности (битности) установленной платформы 1С и веб-сервера. Если вы используете 64-битную версию Windows и 64-битный Apache/IIS, но при этом установили 32-битную платформу 1С (или наоборот), модули расширения веб-сервера не смогут корректно загрузиться. Выясним, что в таком случае веб-сервис может работать (по инерции или через другие механизмы), а HTTP-сервисы — нет. Всегда стремитесь к тому, чтобы битность веб-сервера и платформы 1С совпадала (например, x64 для обоих компонентов).
Если после всех манипуляций ошибка сохраняется, выполните следующие действия:
iisreset для IIS или рестарт службы Apache).IIS AppPool\ИмяПула), должен иметь права на чтение папки bin платформы 1С и папки с публикацией..../hs/employee/ вместо .../hs/employee. В некоторых релизах платформы это критично.Таким образом, мы проанализировали основные факторы, вызывающие 404 ошибку. Чаще всего решение кроется в регистре символов или в настройках файла default.vrd. Тщательная проверка этих параметров позволит вам успешно запустить HTTP-интеграцию.