Многие разработчики 1С сталкиваются со следующей проблемой при интеграции систем: база успешно опубликована на веб-сервере (например, IIS), получение WSDL-описания отрабатывает корректно и возвращает статус 200 ОК, но при попытке вызова конкретного метода в ответ приходит Ошибка 500. Internal Server Error. Проанализируем эту ситуацию подробно и выясним, какие шаги предпринять для локализации и устранения неисправности.
Ошибка 500 — это маркер критического сбоя на стороне сервера. В подавляющем большинстве случаев (около 99%), если WSDL отдается штатно, проблема кроется непосредственно внутри кода вызываемого метода веб-сервиса или в процедурах инициализации сеанса.
Рассмотрим частый сценарий, из-за которого возникает данная ошибка: нехватка прав доступа (RLS или ролей). Пользователь, под которым выполняется авторизация при вызове веб-сервиса, может не иметь прав на чтение конкретного справочника, регистра или документа, к которым обращается код. Поскольку вызов происходит в неинтерактивном режиме, платформа генерирует исключение, которое транслируется веб-сервером в код 500.
Также обратим внимание, что ошибка может скрываться не только в самом методе сервиса, но и в модуле сеанса, например, при вызове обработчика УстановкаПараметровСеанса, который отрабатывает ДО начала выполнения логики самого веб-сервиса.
На рабочих серверах отладка часто отключена по соображениям производительности и безопасности. Разберем по шагам, как диагностировать ошибку в таких условиях:
Попытка
// Основной код метода
Результат = ПолучитьДанныеИзСправочника();
Возврат Результат;
Исключение
Возврат ОписаниеОшибки();
КонецПопытки;
Если же сервер является тестовым, мы можем включить полноценный отладчик. Для этого необходимо запустить сервер 1С с ключом отладки (-debug), а в Конфигураторе в меню "Отладка - Подключение - Автоматическое подключение" обязательно поставить галочку "Web сервисы". Затем установим точку останова в начале метода.
Если код абсолютно рабочий (например, он успешно выполняется на другом сервере), обратим внимание на настройки самого веб-сервера IIS. Наиболее популярной причиной 500-й ошибки сразу после настройки публикации является конфликт разрядностей платформы и пула приложений.
Если у вас установлена 32-битная платформа 1С, а IIS работает в 64-битном режиме (по умолчанию), необходимо внести изменения. Перейдем в Диспетчер служб IIS, откроем раздел пулов приложений (Application Pools), выберем нужный пул и перейдем в его "Дополнительные параметры" (Advanced Settings). Найдем параметр Разрешены 32-разрядные приложения (Enable 32-Bit Applications) и установим его в значение True.
Для успешной обработки запроса рабочему процессу IIS необходимы права на файлы операционной системы. Удостоверимся, что группы пользователей веб-сервера (чаще всего IIS_IUSRS или IUSR) обладают правами на "Чтение и выполнение" в следующих директориях:
bin), где располагаются библиотеки платформы, включая wsisapi.dll.default.vrd и web.config.Платформа 1С интегрируется с IIS через технологию ISAPI. Проанализируем установленные компоненты Windows. Через "Диспетчер серверов" (в разделе ролей IIS) необходимо проверить, установлены ли следующие компоненты: Расширения ISAPI (ISAPI Extensions) и Фильтры ISAPI (ISAPI Filters). Без них IIS не сможет передать запрос в библиотеку 1С.
Если 1С так и не записала ошибку в свой журнал, воспользуемся арсеналом администратора Windows:
localhost), IIS снимет маску безопасности и вместо общей ошибки 500 покажет точный подкод (например, 500.19) и укажет на проблемный модуль или строку конфигурации.web.config правило: <httpErrors errorMode="Detailed" />. Обязательно убирайте эту настройку после завершения диагностики на боевых серверах!Наконец, если 500-я ошибка имеет плавающий характер (то есть, то нет), выясним причину в системных ресурсах: проверьте наличие свободных клиентских лицензий 1С, состояние рабочих процессов кластера (rphost) и возможные зависания соединений. В таких ситуациях может временно спасти перезапуск пула IIS или службы Агента сервера 1С.