Почему не открывается WSDL веб-сервиса 1С и возникает ошибка 500

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

При публикации и настройке веб-сервисов (SOAP) в платформе 1С:Предприятие разработчики иногда сталкиваются с проблемой: база опубликована корректно, веб-сервис отображается в файле default.vrd, однако при попытке получить его описание по URL вида http://server/publication/ws/WebServiceName?wsdl браузер выдает внутреннюю ошибку сервера (HTTP Status 500). При этом другие веб-сервисы из той же информационной базы могут функционировать без сбоев.

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

Основные причины ошибки 500 при генерации WSDL

Описание WSDL создается платформой 1С на лету путем трансляции структуры веб-сервиса и привязанных к нему XDTO-пакетов в стандартный формат W3C XML Schema. Если на этом этапе платформа встречает некорректно описанные данные или ошибку в коде инициализации, генерация схемы сбрасывается с ошибкой 500.

Выделим ключевые факторы, вызывающие такой сбой:

  1. Некорректные типы в XDTO-пакетах или параметрах методов. Если параметр метода или возвращаемое значение ссылаются на XDTO-тип, у которого неверно заполнено пространство имен (TargetNamespace), отсутствуют необходимые типы или наследование выполнено с ошибкой (например, при копировании пакета), генератор схем C++ внутри платформы завершает работу аварийно.
  2. Ошибки в модуле веб-сервиса. При вызове WSDL платформа выполняет первичную компиляцию и инициализацию модуля веб-сервиса. Синтаксические ошибки, вызовы недоступных на сервере клиентских процедур или ошибки в секции инициализации модуля приводят к HTTP 500.
  3. Проблемы кэширования сеансов. Веб-сервер (Apache или IIS) либо процесс сервера приложений 1С может удерживать устаревшие схемы XDTO в кэше после внесения изменений в конфигураторе.
  4. Спецсимволы в пространствах имен. Использование невалидных UTF-8 символов, пробелов или неэкранированной кириллицы в поле URI пространства имен веб-сервиса или XDTO-пакета.

Шаг 1. Проверка типов данных в XDTO-пакетах и параметрах

Проанализируем структуру созданного веб-сервиса в Конфигураторе. В большинстве случаев ошибка 500 возникает именно из-за нестыковок в типах XDTO.

  1. Откроем ветку метаданных Общие -> Web-сервисы и перейдем к проблемному сервису.
  2. Проверим каждую операцию и её параметры. Нажмем на поле выбора типа у параметров и у возвращаемого значения.
  3. Убедимся, что выбранный тип действительно принадлежит нужному пакету XDTO, а не остался ссылкой на старый или удаленный пакет (что часто происходит при копировании типов или пакетов).
  4. Откроем используемый XDTO-пакет в дереве метаданных. Проверим, заполнено ли свойство Пространство имен (TargetNamespace) у самого пакета и у входящих в него типов. Пространство имен не должно быть пустым.

Быстрый тест для проверки: Временно заменим типы параметров и возвращаемых значений операций веб-сервиса со сложных XDTO-типов на базовые стандарты XML, например xs:string или xs:boolean. Обновим конфигурацию БД и повторно запросим ?wsdl в браузере. Если ошибка исчезла — проблема гарантированно находится внутри структуры пользовательского XDTO-пакета.

Шаг 2. Изоляция модуля веб-сервиса

Чтобы исключить влияние программного кода 1С на этап генерации описания, проверим модуль самого веб-сервиса.

  1. Откроем модуль веб-сервиса через контекстное меню в Конфигураторе.
  2. Закомментируем весь исполняемый код внутри функций-обработчиков веб-сервиса, оставив только минимальный каркас:

Функция ВыполнитьОперацию(Параметр1)
    Возврат Истина;
КонецФункции
  1. Запустим синтаксический контроль модуля для контекста Сервер.
  2. Обновим конфигурацию базы данных и проверим доступность ссылки WSDL. Если WSDL успешно сформировался, пошагово раскомментируем код, чтобы найти вызывающую сбой функцию или обращение к контексту.

Шаг 3. Очистка кэша и обновление публикации

Если метаданные и код проверены, но веб-сервер продолжает отдавать ошибку 500, необходимо сбросить накопленный кэш сеансов:

  1. Выполним перезапуск службы веб-сервера (Apache или IIS).
  2. Перезапустим службу ragent (Агент сервера 1С:Предприятия).
  3. Обновим публикацию информационной базы через меню Конфигуратора: Администрирование -> Публикация на веб-сервере.... Убедимся, что напротив нашего веб-сервиса стоит флаг публикации.
  4. При проверке в браузере сбросим кэш страницы с помощью комбинации клавиш Ctrl + F5.
← На главную