Как исправить зависание веб-публикации 1С на IIS и ошибку остановки канала прослушивателя HTTP

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

При администрировании серверов «1С:Предприятие», работающих совместно с веб-сервером IIS (Internet Information Services), специалисты часто сталкиваются со следующей проблемой: после обновления платформы или планового обслуживания веб-клиенты перестают запускаться. Пользователи видят бесконечно висящую желтую заставку 1С, а в журнале событий Windows (Event Viewer) появляется предупреждение от IIS следующего содержания: «Рабочий процесс обслуживающий пул приложений не смог остановить канал прослушивателя для протокола http в отведенный интервал времени» (Event ID 5013 или 5138).

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

Выясняем причину: почему падает пусковой процесс IIS?

Для того чтобы эффективно решить проблему, проанализируем внутренние механизмы взаимодействия IIS и «1С:Предприятия». Когда пользователь обращается к опубликованной информационной базе через браузер или тонкий клиент по протоколу HTTP/HTTPS, IIS создает рабочий процесс w3wp.exe для соответствующего пула приложений. Этот процесс загружает специальный модуль расширения веб-сервера 1С — динамическую библиотеку wsisapi.dll.

Этот модуль транслирует HTTP-запросы от клиентов и перенаправляет их к серверу приложений 1С (к процессам rmngr.exe и rphost.exe). Если на стороне сервера 1С происходит сбой, зависание сеанса, блокировка лицензии или конфликт версий, библиотека wsisapi.dll «зависает» в ожидании ответа. В этот момент IIS, пытаясь выполнить плановый рециклинг (перезапуск) пула приложений или остановить его по таймауту, посылает рабочему процессу сигнал на завершение работы. Поскольку поток внутри w3wp.exe заблокирован ожиданием ответа от сервера 1С, процесс не может корректно закрыть сетевой сокет за отведенные 90 секунд (настройка по умолчанию). В результате IIS принудительно убивает процесс и фиксирует ошибку канала прослушивателя.

Рассмотрим пошагово комплекс мер, которые помогут полностью устранить эту проблему и предотвратить её появление в будущем.

Решение 1. Очистка кэша сеансов и перезапуск Агента сервера 1С

Как показывает практика, простая перезагрузка веб-сервера IIS часто не дает результата, поскольку зависшие транзакции или поврежденный кэш сеансов на стороне службы «Агент сервера 1С:Предприятия» продолжают блокировать новые подключения. Для исправления ситуации выполним полную очистку временных данных. Для этой задачи можно использовать инструмент для анализа и очистки каталога srvinfo.

Разберем процесс очистки по шагам:

  1. Откроем оснастку «Службы» (services.msc) на сервере приложений 1С.
  2. Найдем службу «Агент сервера 1С:Предприятия» (например, 1C:Enterprise 8.3 Server Agent) и остановим её.
  3. Перейдем в каталог кластера 1С. По умолчанию он находится по пути: C:\Program Files\1cv8\srvinfo\reg_1541\ (вместо reg_1541 может быть имя вашего порта кластера).
  4. Внутри этой директории найдем папки с кэшем сеансовых данных, чьи имена начинаются на snccntx (например, snccntx306233ba-7612-4f76-80db-002621903328). Полностью удалим эти папки. В них хранится кэш сеансов, который мог повредиться при некорректном завершении процессов.
  5. Снова запустим службу «Агент сервера 1С:Предприятия».
  6. Перезапустим службу веб-сервера IIS (World Wide Web Publishing Service).

Для автоматизации этой процедуры администраторы могут использовать скрипт PowerShell. Рассмотрим пример безопасного перезапуска служб с очисткой временных директорий:


# Остановка служб IIS и 1С
Stop-Service -Name "W3SVC" -Force
Stop-Service -Name "1C:Enterprise 8.3 Server Agent" -Force

# Ожидание завершения процессов
Start-Sleep -Seconds 5

# Очистка сеансового кэша в каталоге кластера 1С
$ClusterPath = "C:\Program Files\1cv8\srvinfo\reg_1541"
if (Test-Path $ClusterPath) {
    Get-ChildItem -Path $ClusterPath -Directory -Filter "snccntx*" | Remove-Item -Recurse -Force
}

# Запуск служб в обратном порядке
Start-Service -Name "1C:Enterprise 8.3 Server Agent"
Start-Service -Name "W3SVC"

Решение 2. Проверка и настройка раздачи лицензий кластером 1С

Зависание на заставке (когда логотип 1С висит бесконечно и не появляется окно авторизации) в 90% случаев связано с поиском программных или аппаратных лицензий HASP. Если веб-сервер не может оперативно получить свободную лицензию, рабочий процесс IIS уходит в глубокое ожидание.

Выполним правильную настройку раздачи лицензий:

  1. Запустим утилиту «Администрирование серверов 1С Предприятия».
  2. Перейдем к списку информационных баз, выберем нужную базу и откроем её свойства.
  3. Установим параметр «Разрешить выдачу лицензий сервером 1С:Предприятия» в значение «Да» (по умолчанию может быть установлено значение «Нет» или «Использовать настройки по умолчанию»).
  4. Если используются клиентские программные лицензии, убедимся, что файлы лицензий (файлы с расширением .lic) установлены в каталог, доступный серверной службе 1С, например: C:\ProgramData\1C\licenses\.
  5. При использовании многопользовательских USB-ключей HASP на отдельном сервере, настроим файл nethasp.ini на сервере 1С, явно указав IP-адрес менеджера лицензий NH_SERVER_ADDR. Это исключит длительный и нестабильный широковещательный поиск ключа по сети.

Решение 3. Изоляция баз 1С в выделенные пулы приложений IIS

По умолчанию при публикации баз через конфигуратор или утилиту webinst все публикации привязываются к стандартному пулу приложений DefaultAppPool. Если на сервере опубликовано несколько баз, то зависание веб-клиента в одной базе приведет к падению всего пула, парализуя работу остальных пользователей. Настоятельно рекомендуется разделять базы по индивидуальным пулам приложений.

Выполним изоляцию баз по шагам:

  1. Откроем «Диспетчер служб IIS».
  2. В левом дереве подключений выберем пункт «Пулы приложений».
  3. В панели «Действия» справа нажмем «Добавить пул приложений...».
  4. Зададим имя пулу, соответствующее имени базы (например, Pool_Buhg_Production). В поле «Версия среды .NET CLR» выберем «Без управляемого кода» (поскольку расширение 1С написано на C++ и не требует среды .NET), режим управляемого конвейера оставим «Встроенный» (Integrated). Нажмем «ОК».
  5. Перейдем в дерево сайтов, найдем виртуальный каталог нашей опубликованной базы 1С.
  6. В панели «Действия» выберем «Основные настройки...».
  7. Нажмем кнопку «Выбрать...» рядом с полем пула приложений и назначим только что созданный индивидуальный пул. Нажмем «ОК».

Теперь зависание или утечка памяти в одной базе затронет только её собственный рабочий процесс w3wp.exe, а остальные публикации продолжат работу в штатном режиме.

Решение 4. Настройка прав доступа для учетной записи пула

По умолчанию новые пулы приложений в IIS запускаются под виртуальной системной учетной записью ApplicationPoolIdentity. Из-за этого у процесса w3wp.exe может не хватать прав для доступа к временным каталогам системы, файлам платформы 1С или каталогу файловой базы (если публикация файловая).

Для исправления прав выполним следующие действия:

  1. В диспетчере IIS перейдем в «Пулы приложений», выберем созданный пул и в меню справа нажмем «Дополнительные параметры...».
  2. В разделе «Модель процесса» найдем пункт «Удостоверение» (Identity).
  3. Нажмем на троеточие и заменим значение на встроенную учетную запись «NetworkService» или укажем учетные данные специально созданного локального пользователя-администратора (например, usr1cv8), который имеет полные права на папки с базой данных и программными файлами 1С.
  4. Предоставим группе пользователей IIS_IUSRS права на «Чтение», «Запись» и «Модификацию» для каталога публикации базы (по умолчанию это C:\inetpub\wwwroot\ИмяВашейБазы\).

Решение 5. Контроль разрядности и проверка сопоставления обработчиков

При использовании 64-разрядной версии платформы «1С:Предприятие» критически важно настроить пул приложений IIS на работу исключительно в 64-битном режиме. Смешивание разрядностей неизбежно приводит к сбоям загрузки DLL-библиотеки 1С.

Убедимся в правильности настроек разрядности:

  1. В дополнительных параметрах пула приложений IIS (раздел «Модель процесса») найдем опцию «Разрешены 32-разрядные приложения» (Enable 32-Bit Applications) и переведем её в положение False.
  2. Перейдем в настройки виртуального каталога нашей публикации базы 1С в IIS и откроем пункт «Сопоставления обработчиков» (Handler Mappings).
  3. Найдем сопоставление для веб-сервисов 1С (обычно с именем 1C Web-service Extension или *.1cws / *.1css).
  4. Убедимся, что в пути к исполняемому файлу указана библиотека из 64-битного каталога платформы, например: "C:\Program Files\1cv8\8.3.X.XXXX\bin\wsisapi.dll". Если путь ведет в папку Program Files (x86), исправим его на x64 версию.

Решение 6. Тонкая настройка лимитов времени работы пула приложений

Для минимизации аварийных завершений процессов IIS при выполнении тяжелых отчетов пользователями, скорректируем стандартные таймауты IIS:

Применяя данные комплексные меры, мы добьемся высокой отказоустойчивости веб-сервера IIS при работе с платформой «1С:Предприятие 8.3», полностью избавившись от зависания сессий на заставке запуска и системных ошибок остановки каналов прослушивания HTTP. Для автоматического аудита параметров конфигурации и выявления узких мест подойдёт обработка для чек-апа веб-публикации на IIS.

← На главную