Как исправить ошибки 404.0 Not Found и 405.0 Method Not Allowed для HTTP-сервисов 1С на IIS 10.0

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

Настройка HTTP-сервисов в 1С — это мощный инструмент для интеграции, однако процесс их публикации на веб-сервере Internet Information Services (IIS) 10.0 часто сопровождается трудностями. Ошибки с кодами 404 (Не найдено) и 405 (Метод не разрешен) являются наиболее распространенными преградами. В рамках данной статьи мы подробно разберем, как правильно опубликовать сервис, настроить файл конфигурации default.vrd и избежать типовых ошибок, связанных с регистром символов и правами доступа.

Анализ структуры URL и проблема регистра символов

Первым делом проанализируем структуру URL, по которому мы обращаемся к сервису. Стандартный путь выглядит следующим образом: http://[Server]/[BaseName]/hs/[RootURL]/[URLTemplate]. Рассмотрим типичную ситуацию: если ваша база опубликована на IIS под именем Roznica, то обращение по адресу http://127.0.0.1/roznica/hs/... (с маленькой буквы) может привести к ошибке 404.0 Not Found.

Выясним причину: несмотря на то, что файловая система Windows нечувствительна к регистру, модуль расширения 1С (wsisapi.dll), работающий внутри IIS, крайне строго относится к написанию имени базы. Имя базы в URL должно символ в символ совпадать с тем, что указано в настройках публикации в IIS и в файле default.vrd. Если в конфигураторе при публикации вы указали Roznica, используйте именно такое написание в Postman или других клиентах.

Также обратим внимание на Шаблон URL. Часто разработчики добавляют в путь лишние сегменты, такие как v1, которых нет в метаданных сервиса 1С. Если ваш шаблон настроен как /GetDocumentData, то адрес должен заканчиваться именно так. Любое отклонение в структуре пути гарантированно вызовет 404 ошибку.

Публикация HTTP-сервисов из расширений

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

  1. Откроем диалог публикации (Администрирование — Публикация на веб-сервере).
  2. На вкладке "HTTP сервисы" убедимся, что установлена галочка "Публиковать HTTP сервисы расширений по умолчанию". Это ключевой момент для автоматизации процесса.
  3. Проанализируем содержимое файла default.vrd, который находится в каталоге публикации базы (обычно это C:\inetpub\wwwroot\[ИмяБазы]).

Если автоматическая публикация не сработала, мы можем прописать сервис вручную. В секции <httpServices> файла default.vrd должен присутствовать атрибут publishExtensionsByDefault="true". Пример корректной структуры файла:


<?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="/Roznica"
		ib="Srvr=&quot;ServerName&quot;;Ref=&quot;BaseName&quot;;">
	<httpServices publishExtensionsByDefault="true">
		<service name="ИмяСервиса" rootUrl="ElKassa" enable="true"/>
	</httpServices>
</point>

Обратите внимание: если сервис находится в расширении, иногда требуется указать его полное имя в формате ИмяРасширения_ИмяСервиса, хотя при включенном флаге publishExtensionsByDefault это обычно не требуется.

Устранение ошибки 405 Method Not Allowed

Если сервер начал отвечать кодом 405, это добрый знак: база найдена, и веб-сервер понимает, к какому ресурсу идет обращение. Однако используемый HTTP-метод (GET, POST, PUT и т.д.) не разрешен для этого шаблона или перехватывается сторонним модулем.

Проанализируем ситуацию с методами в 1С. Рассмотрим простейший код метода сервиса:


Функция СоздатьОтчетОРозничныхПродажах(Запрос)
    // Обработка данных
    Ответ = Новый HTTPСервисОтвет(200);
    Возврат Ответ;    
КонецФункции

Посмотрим на настройки в конфигураторе: если для метода СоздатьОтчетОРозничныхПродажах в свойствах указан HTTP метод: POST, а вы пытаетесь вызвать его из Postman как GET, вы получите ошибку 405. Убедитесь в полном соответствии вызываемого метода и настроек в метаданных 1С.

Еще одна скрытая причина ошибки 405 на IIS 10.0 — установленный компонент WebDAV Publishing. Этот модуль имеет привычку "перехватывать" методы POST, PUT и DELETE. Для нормальной работы 1С рекомендуется либо полностью удалить WebDAV из ролей сервера, либо отключить его в web.config вашей публикации:


<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

Настройка авторизации и прав доступа

Часто проблема "невидимости" сервиса кроется в правах доступа пользователя, под которым происходит подключение. Выясним, как правильно настроить авторизацию:

  1. Проверим наличие роли у пользователя 1С, которая дает право на использование данного HTTP-сервиса. Без этого 1С может возвращать 401 или 403 ошибку, которые иногда маскируются под 404 при определенных настройках IIS.
  2. Если используется Basic Authentication, убедитесь, что в Postman на вкладке "Authorization" выбран тип "Basic Auth" и введены корректные логин/пароль.
  3. В настройках IIS для данного виртуального приложения должна быть включена "Anonymous Authentication" (Анонимная проверка подлинности), чтобы 1С сама могла управлять процессом авторизации через заголовки запроса.

Если вы хотите прописать пользователя по умолчанию прямо в файле default.vrd, добавьте параметры Usr и Pwd в строку соединения ib. Однако помните, что это снижает безопасность системы.

Проверка сопоставления обработчиков (Handler Mappings)

Рассмотрим технический нюанс работы самого IIS. Веб-сервер должен знать, что запросы к определенным путям нужно передавать расширению 1С (wsisapi.dll). Зайдите в консоль управления IIS, выберите вашу базу и откройте раздел "Handler Mappings".

Найдите обработчик для 1С (обычно он создается автоматически при публикации). Нажмите "Edit Feature Permissions" и убедитесь, что разрешены Read, Script и Execute. Также в настройках самого обработчика (Request Restrictions) на вкладке "Verbs" должно быть выбрано "All Verbs". Если там жестко прописано только GET,POST, то попытка использовать OPTIONS или PATCH вернет ошибку 405.

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

← На главную