Как устранить зависание тонкого клиента 1С после входа пользователей через веб-клиент в IIS

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

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

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

Выясняем причины зависания связки 1С и IIS

Для начала проанализируем внутреннюю архитектуру взаимодействия. Когда пользователь подключается через тонкий клиент по протоколу HTTP/HTTPS или через обычный браузер, веб-сервер IIS обрабатывает входящие запросы через специальное расширение (ISAPI-модуль wsapising.dll или wsapi.dll). Вся эта активность выполняется в рамках так называемого пула приложений (Application Pool) под управлением рабочего процесса IIS w3wp.exe.

Если веб-клиент и тонкие клиенты используют один и тот же пул приложений, любая монопольная блокировка процесса w3wp.exe приводит к выстраиванию бесконечной очереди запросов. Новые пользователи тонкого клиента попросту не могут пройти этап авторизации и бесконечно видят заставку запуска 1С.

Ниже мы подробно разберем пять основных технических причин этой проблемы и пошагово настроим сервер.

Шаг 1. Изоляция баз по отдельным пулам приложений

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

Разберем по шагам, как изолировать базы данных:

  1. Откройте Диспетчер служб IIS.
  2. В левой панели навигации перейдите в раздел Пулы приложений (Application Pools).
  3. В панели «Действия» (справа) нажмите Добавить пул приложений....
  4. Укажите уникальное имя для пула (например, Pool_Buh или Pool_ZUP).
  5. В поле «Версия среды .NET CLR» обязательно выберите значение Без управляемого кода (No Managed Code). Это критически важно, так как расширение 1С представляет собой нативный C++ модуль, и поддержка .NET в пуле может вызывать внутренние конфликты планировщика потоков Windows.
  6. Нажмите «ОК» для создания пула.
  7. Перейдите в раздел Сайты -> Default Web Site, найдите виртуальное приложение вашей базы 1С, нажмите по нему правой кнопкой мыши и выберите Управление приложением -> Основные настройки.
  8. Нажмите кнопку «Выбрать» напротив пула приложений и назначьте только что созданный персональный пул.

Повторите эту операцию для каждой опубликованной базы. Теперь зависание или переполнение очереди в одной базе никак не повлияет на работоспособность остальных баз.

Шаг 2. Оптимизация многопоточности и параметров пула процессов

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

Проведем оптимизацию параметров пула:

  1. В Диспетчере служб IIS откройте Пулы приложений.
  2. Выберите ваш созданный пул баз 1С и в панели действий нажмите Дополнительные параметры (Advanced Settings).
  3. Найдите группу параметров Модель процесса (Process Model).
  4. В параметре Максимальное число рабочих процессов измените значение с 1 на 4 или 5 (рекомендуется устанавливать по числу физических ядер процессора на сервере). Это позволит IIS распределять нагрузку на несколько параллельных процессов w3wp.exe.
  5. В этой же группе найдите параметр Загрузить профиль пользователя (Load User Profile) и переведите его в положение False (в некоторых случаях, если используется авторизация по доменным учетным записям, может потребоваться значение True — протестируйте оба варианта).

Шаг 3. Решение проблемы отсутствия каталога Desktop в SystemProfile

Распространенная системная ошибка Windows Server, из-за которой веб-расширения 1С «намертво» зависают при попытке инициализации сессии. Поскольку служба IIS запускает рабочие процессы от имени системной учетной записи (например, System или NetworkService), платформа 1С пытается обратиться к временным папкам профиля этой учетной записи, в том числе ищет рабочий стол (Desktop). Если папки физически нет на диске, процесс зависает без выдачи ошибок в логи.

Давайте исправим это вручную. Нам потребуется создать соответствующие папки в системных директориях Windows.

Выполните следующие команды в PowerShell с правами администратора или создайте папки через стандартный Проводник Windows:


New-Item -Path "C:\Windows\System32\config\systemprofile\Desktop" -ItemType Directory -Force
New-Item -Path "C:\Windows\SysWOW64\config\systemprofile\Desktop" -ItemType Directory -Force

После физического создания папок необходимо предоставить права доступа:

  1. Нажмите правой кнопкой мыши по созданной папке Desktop.
  2. Перейдите во вкладку Безопасность и нажмите кнопку Изменить -> Добавить.
  3. Добавьте учетные записи локальных пользователей IUSR, группы IIS_IUSRS, а также системного пользователя 1С (обычно это USR1CV8).
  4. Предоставьте им права уровня Полный доступ (Full Control) и примените изменения.

Шаг 4. Настройка прав доступа к файлам программных лицензий

При использовании программных лицензий 1С инициализация сессии веб-клиента требует валидации файла лицензии. Сам веб-сервер IIS при обращении к файлам лицензии посылает запросы к службе WMI (Windows Management Instrumentation) для сверки аппаратных характеристик сервера. Если у учетной записи пула приложений IIS нет прав на чтение папки с лицензиями или к системным компонентам, проверка зависает на этапе поиска ключа.

Выполним обязательные настройки безопасности файловой системы:

  1. Перейдите в каталог хранения файлов программных лицензий 1С. По умолчанию в Windows это: C:\ProgramData\1C\licenses.
  2. Откройте свойства этой папки, перейдите на вкладку Безопасность.
  3. Убедитесь, что группа пользователей IIS_IUSRS и пользователь USR1CV8 имеют полные права (Чтение, Запись, Изменение) на эту папку и все вложенные файлы .lic.
  4. Также зайдите в консоль администрирования серверов 1С:Предприятия. Откройте свойства вашей информационной базы и убедитесь, что параметр Разрешить выдачу лицензий сервером 1С:Предприятия установлен в значение Да.

Шаг 5. Радикальное устранение сбоев модулей веб-сервера

Если после выполнения всех точечных настроек проблема с зависанием на IIS сохраняется, это может свидетельствовать о повреждении конфигурационных файлов метабазы IIS или некорректной работе модулей фильтрации после обновлений операционной системы (особенно актуально для Windows Server 2008 / 2008 R2).

В этом случае рекомендуется выполнить процедуру чистой переустановки роли веб-сервера:

  1. В Диспетчере серверов полностью удалите роль Веб-сервер (IIS).
  2. Перезагрузите сервер.
  3. Физически удалите папку C:\inetpub, в которой хранятся конфигурационные файлы и временные данные старых публикаций.
  4. Заново установите роль IIS со всеми необходимыми компонентами поддержки ISAPI-фильтров.
  5. Запустите Конфигуратор 1С с правами администратора и выполните повторную публикацию баз данных через меню Администрирование -> Публикация на веб-сервере....

Для сильно нагруженных систем или устаревших версий ОС Windows Server альтернативным и чрезвычайно стабильным решением является использование веб-сервера Apache 2.4 (x64) вместо IIS. Apache работает по иной схеме распределения памяти и процессов, абсолютно нечувствителен к системным профилям Windows и механизму блокировок пулов, что делает его развертывание отличным решением при регулярных сетевых сбоях.

← На главную