Ситуация, когда основная информационная база успешно опубликована и доступна через веб-клиент, но при этом HTTP-сервисы (обращения по пути /hs/) выдают ошибку HTTP 404.0 - Not Found, является довольно распространенной при работе с веб-сервером IIS. Давайте детально разберем, почему это происходит, проанализируем внутренние механизмы взаимодействия 1С и IIS и выясним, какие настройки необходимо выполнить, чтобы ваши сервисы "взлетели".
Когда мы обращаемся к информационной базе через браузер, IIS понимает, что запрос относится к 1С, благодаря расширениям файлов или сопоставленным обработчикам. Однако путь /hs/ (HTTP Service) является виртуальным. Ошибка 404 в данном случае часто означает, что веб-сервер IIS не передал запрос модулю расширения 1С (wsisapi.dll), а попытался найти физическую папку или файл с именем hs в каталоге публикации на диске. Поскольку такой папки физически не существует (это логический путь внутри платформы), сервер возвращает стандартный ответ "Ресурс не найден".
Проанализируем ключевой этап настройки. Для корректной работы HTTP-сервисов в IIS должно быть настроено так называемое "сопоставление сценариев типа звездочка" (Wildcard Script Map). Рассмотрим, как это сделать по шагам:
* (звездочка). Это крайне важно, так как именно этот символ заставляет IIS передавать абсолютно все запросы, включая пути /hs/, в модуль 1С.wsisapi.dll. Обратите внимание, что путь должен соответствовать разрядности и версии вашей платформы. Например: C:\Program Files (x86)\1cv8\8.3.12.xxxx\bin\wsisapi.dll.1C HTTP Service Handler.Выясним еще одну важную деталь: веб-сервер IIS, в отличие от Apache, может быть крайне чувствителен к регистру символов в URL при работе с расширением 1С. Если в вашей конфигурации 1С корневой URL HTTP-сервиса задан как Invoice, а вы обращаетесь к нему по адресу .../hs/invoice (с маленькой буквы), сервер может вернуть ошибку 404.
Рекомендуется: всегда прописывать rootUrl сервиса и имена методов в конфигураторе маленькими буквами. При вызове сервиса из внешних систем также строго соблюдайте регистр, указанный в публикации. Проанализируйте ваш файл default.vrd, чтобы убедиться, какой именно путь там прописан.
Если вы используете 32-разрядную платформу 1С (x86) на 64-битной операционной системе Windows, ваш HTTP-сервис не будет работать, пока вы не разрешите выполнение 32-битных приложений в настройках IIS. Разберем, как это настроить:
DefaultAppPool или пул с именем вашей базы).True.Одной из самых коварных причин блокировки HTTP-запросов (особенно методов POST, PUT, DELETE) является установленный компонент WebDAV Publishing. Он перехватывает запросы к расширениям и часто мешает работе 1С. Рассмотрим, как его отключить:
Посмотрим в раздел "Модули" вашего сайта в IIS. Если в списке присутствует WebDAVModule, его необходимо удалить. Также проверьте раздел "Правила фильтрации запросов" — там не должно быть запретов на используемые вами глаголы HTTP.
Иногда проблема кроется в самом файле публикации 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-сервиса.
Не забудем проверить права доступа. Пользователь, от имени которого запущен пул приложений (обычно это IIS AppPool\DefaultAppPool или IUSR), должен иметь права "Чтение и выполнение" на:
bin).default.vrd.Если прав недостаточно, IIS может вернуть 401 или 404 ошибку, так как не сможет инициализировать библиотеку wsisapi.dll.
Подводя итог, можно сказать, что "оживление" HTTP-сервиса на IIS требует комплексного подхода. Мы с вами разобрали, что чаще всего проблема решается правильной настройкой Handler Mappings с использованием пути * и отключением фильтрации по физическим файлам. Не забывайте также про разрядность wsisapi.dll и соответствие настроек пула приложений. После выполнения всех настроек обязательно выполните команду iisreset в командной строке для применения изменений.