Как исправить ошибку HTTP 401.5 веб-сервиса 1С на IIS при записи данных?

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

При обновлении платформы 1С:Предприятие системные администраторы и разработчики часто сталкиваются со специфическим поведением веб-сервисов, опубликованных на веб-сервере IIS (Internet Information Services). Типичный сценарий: методы веб-сервиса на чтение данных из базы отрабатывают корректно и быстро, но при попытке вызвать метод на запись (например, при проведении или записи нового заказа клиента) система возвращает ошибку HTTP 401.5 Unauthorized.

В этой статье мы подробно разберем, почему возникает эта ошибка, как она связана с архитектурой кластера серверов 1С и какие шаги необходимо предпринять для ее полного устранения.

Что означает ошибка HTTP 401.5 в контексте IIS и 1С?

Код состояния HTTP 401.5 расшифровывается как «Unauthorized: Authorization failed by ISAPI/CGI application» (Авторизация не выполнена из-за приложения ISAPI или CGI).

В связке IIS и 1С интеграционным шлюзом выступает специализированный модуль расширения веб-сервера — библиотека wsisapi.dll. Получив запрос от IIS, этот модуль передает его в рабочий процесс 1С. Ошибка 401.5 означает следующее: сам веб-сервер IIS успешно принял, авторизовал и обработал сетевой запрос на транспортном уровне, но когда дело дошло до передачи запроса внутрь платформы 1С, внутренний механизм авторизации платформы отклонил сессию или не смог ее инициализировать.

Проанализируем типичный сценарий в логах IIS. При использовании базовой авторизации (Basic Authentication) или NTLM часто фиксируются две записи подряд:

  1. Запрос с кодом 401.5 — первая попытка обращения к веб-сервису без авторизационных заголовков, на что IIS отвечает требованием предоставить учетные данные.
  2. Запрос с кодом 200 OK — успешный повторный запрос, когда клиент передал корректный заголовок Authorization: Basic ....

Однако, если ошибка 401.5 становится финальной (запрос прерывается и не завершается кодом 200), это свидетельствует о серьезном сбое на стыке IIS, модуля wsisapi.dll и кластера 1С.

При чем здесь настройки кластера 1С?

Связь между ошибкой веб-сервиса на IIS и настройками кластера 1С неочевидна, но критически важна. Рассмотрим две основные причины, почему параметры кластера напрямую влияют на появление ошибки 401.5 при выполнении транзакций записи.

1. Проблема балансировки нагрузки в многосерверном кластере

Если кластер серверов 1С состоит из нескольких рабочих серверов, а веб-сервер IIS развернут только на одном из них, включается стандартный механизм распределения нагрузки. При вызове метода веб-сервиса запрос от IIS направляется на один из серверов кластера.

Если на уровне кластера не настроены жесткие «Требования назначения функциональности» (которые должны привязывать сервисы интеграции к конкретному рабочему серверу), сессия авторизации может потеряться при перенаправлении запроса между процессами rphost на разных физических серверах. В этот момент платформа пытается авторизовать запрос как анонимный, что приводит к блокировке операции и возврату ошибки 401.5. Сброс настроек кластера по умолчанию временно консолидирует все процессы на одном узле, устраняя проблему.

2. Превышение лимитов ресурсов рабочих процессов (rphost)

Методы чтения данных из базы обычно выполняются быстро и потребляют минимум ресурсов. Метод записи (особенно проведение документов) открывает транзакцию СУБД, задействует тяжелую бизнес-логику конфигурации, требует выделения дополнительной оперативной памяти и накладывает блокировки.

Если в настройках кластера заданы жесткие ограничения на максимальный объем памяти на один рабочий процесс или лимиты по времени вызова, менеджер кластера rmngr может принудительно завершить рабочий процесс rphost прямо в момент выполнения транзакции записи. Для модуля wsisapi.dll это выглядит как мгновенный разрыв соединения, и он возвращает веб-клиенту статус авторизационного сбоя 401.5. Возврат настроек кластера к дефолтным значениям снимает эти ограничения.

Шаг 1. Сброс и корректировка настроек кластера серверов 1С

Для восстановления работоспособности веб-сервиса выполним сброс параметров кластера по умолчанию, а затем настроим их правильно:

  1. Откроем утилиту «Администрирование серверов 1С:Предприятия».
  2. Перейдем в свойства нашего кластера серверов.
  3. Проанализируем параметры блокировок, лимитов памяти и количества соединений на один рабочий процесс. Если параметры были сильно занижены, вернем их к значениям по умолчанию.
  4. В случае многосерверной архитектуры перейдем в ветку «Требования назначения функциональности» и создадим правило, принудительно запускающее сервис веб-сервисов только на основном рабочем сервере, где физически запущен веб-сервер IIS.

Шаг 2. Настройка сопоставления сценариев (Script Mappings) в IIS

После обновления платформы 1С (например, при переходе на релиз 8.3.13.1644) путь к исполняемым файлам меняется. Нам необходимо убедиться, что IIS использует правильную версию библиотеки wsisapi.dll:

  1. Запустим Диспетчер служб IIS.
  2. В дереве подключений выберем наш опубликованный веб-сайт или конкретную виртуальную базу 1С.
  3. В центральной части окна дважды кликнем по иконке «Сопоставления обработчиков» (Handler Mappings).
  4. В панели «Действия» справа выберем пункт «Добавить сопоставление сценария...» (Add Script Map).
  5. Зададим следующие параметры:
    • Путь запроса: *.1cws (или * для полной публикации)
    • Исполняемый файл: укажем точный путь к новой DLL-библиотеке, например: "C:\Program Files\1cv8\8.3.13.1644\bin\wsisapi.dll"
    • Имя: 1C Web Service ISAPI
  6. Нажмем «ОК» и подтвердим разрешение на запуск этого ISAPI-расширения.

Шаг 3. Проверка прав доступа к каталогу новой платформы

Распространенной причиной сбоя авторизации 401.5 является отсутствие прав у пользователя, под которым запущен пул приложений IIS, на чтение и выполнение файлов из каталога новой платформы 1С.

Выясним, как предоставить нужные права:

  1. Определим учетную запись пула приложений IIS (обычно это IIS_IUSRS или DefaultAppPool).
  2. Откроем проводник и перейдем к каталогу установленной платформы: C:\Program Files\1cv8\8.3.13.1644\.
  3. Нажмем правой кнопкой мыши на папку bin, выберем «Свойства», затем вкладку «Безопасность».
  4. Нажмем кнопку «Изменить», добавим группу пользователей IIS_IUSRS (или конкретного пользователя пула).
  5. Установим флажки напротив разрешений «Чтение и выполнение» (Read & Execute), «Список содержимого папки» (List folder contents) и «Чтение» (Read).
  6. Применим изменения ко всем дочерним объектам.

Шаг 4. Анализ программного кода разбора XML и XDTO

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


// Пример небезопасного разбора входящего параметра веб-сервиса
Чтение = Новый ЧтениеXML;
Попытка
    Чтение.УстановитьСтроку(Param);
    // Выполняем чтение и десериализацию объекта XDTO
    ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение);
Исключение
    ЗаписьЖурналаРегистрации("Веб-сервисы", УровеньЖурналаРегистрации.Ошибка,,, 
        "Ошибка разбора XML: " + ОписаниеОшибки());
    ВызватьИсключение "Некорректный формат входящих данных.";
КонецПопытки;

Если во входящем параметре Param передается некорректно сформированная строка или бинарные данные, метод УстановитьСтроку может вызвать аварийное завершение потока выполнения. Всегда оборачивайте логику десериализации XDTO в блоки Попытка...Исключение, чтобы предотвратить падение рабочего процесса rphost.

← На главную