При использовании веб-сервера IIS для работы с веб-клиентами или веб-сервисами 1С часто возникает необходимость одновременной публикации нескольких информационных баз, функционирующих на разных версиях платформы (например, одна база работает на релизе 8.3.9, а другая — на 8.3.10). При стандартной публикации второй базы администраторы часто сталкиваются с ситуацией, когда одна из баз перестает открываться и возвращает ошибку «Ошибка HTTP 500.0 - Internal Server Error».
Рассмотрим подробно причины возникновения этой проблемы и разберем по шагам, как правильно настроить веб-сервер IIS для стабильной совместной работы баз 1С различных версий.
Проанализируем ситуацию: в рамках одного пула приложений IIS (по умолчанию это DefaultAppPool) невозможно одновременно загрузить и использовать модули расширения wsisapi.dll разных версий или разрядностей. Когда первый запрос поступает к веб-серверу, рабочий процесс IIS (процесс w3wp.exe) загружает в память модуль wsisapi.dll той платформы, к базе которой обратился пользователь. Если затем происходит обращение к базе с другой версией платформы, находящейся в том же пуле, сервер пытается применить уже загруженную библиотеку старой версии, что и приводит к ошибке HTTP 500.0.
Помимо совместного использования одного пула, дополнительными причинами ошибки могут выступать:
wsisapi.dll (32-бит или 64-бит) настройкам пула приложений IIS.IIS_IUSRS и IUSR) прав доступа к папке bin с новой версией платформы или к файлу web.config в каталоге публикации.Для исправления проблемы необходимо изолировать рабочие процессы баз данных друг от друга. Разберем по шагам процесс настройки IIS с созданием отдельных пулов приложений.
Регистрация ISAPI-модуля новой платформы:
Откроем консоль управления IIS (Диспетчер служб IIS). Перейдем на верхний уровень — к настройкам самого сервера. В центральном окне выберем раздел «Разрешения ISAPI и CGI» (ISAPI and CGI Restrictions). Добавим запись для библиотеки wsisapi.dll новой версии платформы 1С, указав полный путь к ней (например, C:\Program Files\1cv8\8.3.10.XXXX\bin\wsisapi.dll), и установим флаг разрешения выполнения.
Создание нового пула приложений:
В дереве консоли IIS перейдем к разделу «Пулы приложений» (Application Pools). Добавим новый пул приложений и дадим ему понятное имя (например, AppPool_1C_8.3.10). В параметрах версии среды .NET Framework выберем «Без управляемого кода» (No Managed Code), так как модуль 1С не использует управляемый код .NET.
Настройка параметров разрядности пула:
Перейдем в «Дополнительные параметры» (Advanced Settings) созданного пула приложений. Проверим разрядность используемой платформы 1С:
Если используется 32-разрядная версия платформы 1С, выставим параметр «Разрешены 32-разрядные приложения» (Enable 32-bit Applications) в значение True.
Если используется 64-разрядная платформа 1С, укажем для этого параметра значение False.
Привязка виртуального каталога базы к новому пулу:
В дереве сайтов найдем опубликованное приложение (виртуальный каталог) новой базы. Откроем «Основные настройки» (Basic Settings) данного приложения и в поле «Пул приложений» выберем только что созданный пул AppPool_1C_8.3.10.
Проверка сопоставления обработчиков:
Откроем раздел «Сопоставление обработчиков» (Handler Mappings) для приложения новой базы. Убедимся, что для обработчика 1C Web-service Extension в поле исполняемого файла указан верный абсолютный путь к wsisapi.dll соответствующего релиза 1С.
Настройка прав доступа NTFS:
Проверим права на папку bin нового релиза платформы. В свойствах папки на вкладке «Безопасность» предоставляем группам IIS_IUSRS и IUSR права на «Чтение и выполнение». Также убедимся в наличии прав на чтение и запись для группы IIS_IUSRS в физическом каталоге самой публикации к файлу web.config.
Важно учитывать, что при выполнении повторной публикации базы из меню «Администрирование» > «Публикация на веб-сервере…» Конфигуратор 1С автоматически перезаписывает конфигурационные файлы и сбрасывает привязку базы к пулу приложений на пул по умолчанию (DefaultAppPool).
Поэтому после любой повторной публикации из Конфигуратора необходимо вручную зайти в консоль управления IIS и повторно назначить базе выделенный для её версии платформы пул приложений.
После выполнения указанных настроек и перезапуска веб-сервера IIS обе базы разных версий платформ будут успешно функционировать параллельно, не вызывая ошибок обработки запросов.