При обновлении платформы 1С:Предприятие системные администраторы и разработчики часто сталкиваются со специфическим поведением веб-сервисов, опубликованных на веб-сервере IIS (Internet Information Services). Типичный сценарий: методы веб-сервиса на чтение данных из базы отрабатывают корректно и быстро, но при попытке вызвать метод на запись (например, при проведении или записи нового заказа клиента) система возвращает ошибку HTTP 401.5 Unauthorized.
В этой статье мы подробно разберем, почему возникает эта ошибка, как она связана с архитектурой кластера серверов 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 часто фиксируются две записи подряд:
Authorization: Basic ....Однако, если ошибка 401.5 становится финальной (запрос прерывается и не завершается кодом 200), это свидетельствует о серьезном сбое на стыке IIS, модуля wsisapi.dll и кластера 1С.
Связь между ошибкой веб-сервиса на IIS и настройками кластера 1С неочевидна, но критически важна. Рассмотрим две основные причины, почему параметры кластера напрямую влияют на появление ошибки 401.5 при выполнении транзакций записи.
1. Проблема балансировки нагрузки в многосерверном кластере
Если кластер серверов 1С состоит из нескольких рабочих серверов, а веб-сервер IIS развернут только на одном из них, включается стандартный механизм распределения нагрузки. При вызове метода веб-сервиса запрос от IIS направляется на один из серверов кластера.
Если на уровне кластера не настроены жесткие «Требования назначения функциональности» (которые должны привязывать сервисы интеграции к конкретному рабочему серверу), сессия авторизации может потеряться при перенаправлении запроса между процессами rphost на разных физических серверах. В этот момент платформа пытается авторизовать запрос как анонимный, что приводит к блокировке операции и возврату ошибки 401.5. Сброс настроек кластера по умолчанию временно консолидирует все процессы на одном узле, устраняя проблему.
2. Превышение лимитов ресурсов рабочих процессов (rphost)
Методы чтения данных из базы обычно выполняются быстро и потребляют минимум ресурсов. Метод записи (особенно проведение документов) открывает транзакцию СУБД, задействует тяжелую бизнес-логику конфигурации, требует выделения дополнительной оперативной памяти и накладывает блокировки.
Если в настройках кластера заданы жесткие ограничения на максимальный объем памяти на один рабочий процесс или лимиты по времени вызова, менеджер кластера rmngr может принудительно завершить рабочий процесс rphost прямо в момент выполнения транзакции записи. Для модуля wsisapi.dll это выглядит как мгновенный разрыв соединения, и он возвращает веб-клиенту статус авторизационного сбоя 401.5. Возврат настроек кластера к дефолтным значениям снимает эти ограничения.
Для восстановления работоспособности веб-сервиса выполним сброс параметров кластера по умолчанию, а затем настроим их правильно:
После обновления платформы 1С (например, при переходе на релиз 8.3.13.1644) путь к исполняемым файлам меняется. Нам необходимо убедиться, что IIS использует правильную версию библиотеки wsisapi.dll:
*.1cws (или * для полной публикации)"C:\Program Files\1cv8\8.3.13.1644\bin\wsisapi.dll"1C Web Service ISAPIРаспространенной причиной сбоя авторизации 401.5 является отсутствие прав у пользователя, под которым запущен пул приложений IIS, на чтение и выполнение файлов из каталога новой платформы 1С.
Выясним, как предоставить нужные права:
IIS_IUSRS или DefaultAppPool).C:\Program Files\1cv8\8.3.13.1644\.bin, выберем «Свойства», затем вкладку «Безопасность».IIS_IUSRS (или конкретного пользователя пула).Иногда падение рабочего процесса 1С, вызывающее ошибку 401.5, происходит из-за некорректной обработки входящего XML-пакета в коде самого веб-сервиса. Рассмотрим классический пример инициализации чтения XML, который может вызывать критическую ошибку при неверном формате строки:
// Пример небезопасного разбора входящего параметра веб-сервиса
Чтение = Новый ЧтениеXML;
Попытка
Чтение.УстановитьСтроку(Param);
// Выполняем чтение и десериализацию объекта XDTO
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение);
Исключение
ЗаписьЖурналаРегистрации("Веб-сервисы", УровеньЖурналаРегистрации.Ошибка,,,
"Ошибка разбора XML: " + ОписаниеОшибки());
ВызватьИсключение "Некорректный формат входящих данных.";
КонецПопытки;
Если во входящем параметре Param передается некорректно сформированная строка или бинарные данные, метод УстановитьСтроку может вызвать аварийное завершение потока выполнения. Всегда оборачивайте логику десериализации XDTO в блоки Попытка...Исключение, чтобы предотвратить падение рабочего процесса rphost.