Как исправить ошибку 0x80004005 при публикации веб-сервиса 1С на IIS 8?

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

Развертывание веб-сервисов 1С на платформе IIS (Internet Information Services) — задача, требующая предельной точности в настройках. Ошибка 0x80004005 является одной из самых коварных, так как она относится к категории «неопределенных сбоев» (Unspecified Error), но чаще всего за ней скрываются проблемы с правами доступа, несоответствие битности систем или блокировка библиотек расширения. В этой статье мы подробно разберем, как диагностировать и устранить причины этой ошибки, основываясь на практическом опыте администраторов.

Проанализируем архитектуру и битность системы

Прежде всего, разберем ситуацию, когда используется 64-битная версия платформы 1С:Предприятие на Windows Server 2012 R2. Одной из распространенных ошибок является попытка «перестраховаться» и включить поддержку 32-битных приложений в настройках IIS. Выясним, почему это может мешать.

Если у вас установлена 64-разрядная версия 1С, то библиотека wsisapi.dll также является 64-разрядной. Включая в пуле приложений настройку «Разрешить 32-разрядные приложения» (Enable 32-Bit Applications), вы заставляете рабочий процесс IIS ожидать 32-битную библиотеку. В итоге происходит конфликт, и сервер выдает ошибку инициализации модуля. Рассмотрим правильный порядок действий:

  1. Откроем Диспетчер служб IIS.
  2. Перейдем в раздел Пулы приложений (Application Pools).
  3. Найдем пул, под которым работает ваша опубликованная база (по умолчанию он совпадает с именем публикации).
  4. Выберем Дополнительные параметры (Advanced Settings).
  5. Установим параметр Разрешить 32-разрядные приложения в значение False.
  6. Выполним команду iisreset в командной строке для применения изменений.

Ручная настройка сопоставления обработчиков

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

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

После добавления IIS предложит разрешить это расширение в списке «Ограничения ISAPI и CGI». Обязательно ответьте Да.

Настройка разрешений для папок 1С и публикации

Ошибка 0x80004005 часто означает «Отказано в доступе» на уровне файловой системы. Выясним причину: рабочий процесс IIS (w3wp.exe) запускается от имени специальной учетной записи пула приложений, которая не имеет прав на чтение бинарных файлов 1С в папке Program Files.

Рассмотрим, как правильно настроить права доступа:

  1. Найдем папку с установленной платформой 1С (например, C:\Program Files\1cv8\).
  2. В свойствах папки перейдем на вкладку Безопасность.
  3. Нам нужно добавить пользователя IIS_IUSRS (группа пользователей IIS) или конкретное удостоверение пула (например, IIS AppPool\ИмяВашегоПула).
  4. Предоставим права Чтение и выполнение, Список содержимого папки и Чтение.
  5. Повторим аналогичную операцию для физической папки, куда была выполнена публикация (по умолчанию это C:\inetpub\wwwroot\ваша_база\).

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

Проверка компонентов ISAPI в ролях сервера

Посмотрим на ситуацию со стороны операционной системы Windows Server 2012 R2. Часто при установке IIS администраторы забывают включить поддержку ISAPI-расширений. Без этого компонента IIS просто не знает, что делать с файлом wsisapi.dll.

Проанализируем список установленных ролей:

  1. Запустим Диспетчер серверов (Server Manager).
  2. Перейдем в Управление -> Добавить роли и компоненты.
  3. Дойдем до раздела Роли сервера -> Веб-сервер (IIS) -> Веб-сервер -> Разработка приложений.
  4. Убедимся, что установлены флажки напротив Расширения ISAPI (ISAPI Extensions) и Фильтры ISAPI (ISAPI Filters).
  5. Если они отсутствуют — установите их и перезагрузите сервер.

Решение проблем с зависимостями и системными библиотеками

Поскольку сервер виртуальный и «чистый», в системе могут отсутствовать необходимые библиотеки времени выполнения. Библиотека wsisapi.dll зависит от пакетов Microsoft Visual C++ Redistributable. Если нужной версии нет, библиотека не сможет загрузиться в процесс, возвращая общую ошибку 0x80004005.

Рекомендуется установить пакеты Visual C++ (x64) версий 2013, 2015-2019. Это обеспечит наличие всех необходимых системных вызовов, которые использует платформа 1С 8.3.12.

Использование файла web.config для диагностики

Проанализируем содержимое файла web.config, который создается в папке публикации. Он должен содержать правильные пути к модулю. Пример корректного блока конфигурации для x64 систем:


<configuration>
    <system.webServer>
        <handlers>
            <add name="1C Web-service Extension" 
                 path="*" 
                 verb="*" 
                 modules="IsapiModule" 
                 scriptProcessor="C:\Program Files\1cv8\8.3.12.1440\bin\wsisapi.dll" 
                 resourceType="Unspecified" 
                 requireAccess="Execute" />
        </handlers>
    </system.webServer>
</configuration>

Обратите внимание на параметр modules="IsapiModule". Если в системе не установлены компоненты ISAPI (о чем мы говорили выше), этот обработчик просто не будет распознан.

Проблема DEP (Data Execution Prevention)

На виртуальных машинах под управлением некоторых гипервизоров (например, KVM) может быть жестко настроена политика предотвращения выполнения данных (DEP). Если система безопасности блокирует выполнение кода из библиотек в памяти процесса IIS, вы также увидите ошибку 0x80004005. Попробуем проверить это:

  1. Откроем Панель управления -> Система -> Дополнительные параметры системы.
  2. На вкладке Дополнительно в разделе Быстродействие нажмем Параметры.
  3. Перейдем на вкладку Предотвращение выполнения данных.
  4. Попробуем установить режим «Включить DEP только для основных программ и служб Windows» или добавить w3wp.exe в список исключений (хотя первый вариант предпочтительнее для диагностики).

Подводя итог, можно сказать, что решение проблемы 0x80004005 заключается в комплексной проверке: от битности пула приложений и наличия ролей ISAPI до тонкой настройки прав доступа пользователя пула приложений к бинарным файлам платформы 1С.

← На главную