При публикации и настройке веб-сервисов (SOAP) в платформе 1С:Предприятие разработчики иногда сталкиваются с проблемой: база опубликована корректно, веб-сервис отображается в файле default.vrd, однако при попытке получить его описание по URL вида http://server/publication/ws/WebServiceName?wsdl браузер выдает внутреннюю ошибку сервера (HTTP Status 500). При этом другие веб-сервисы из той же информационной базы могут функционировать без сбоев.
Рассмотрим причины, по которым платформе 1С не удается динамически сформировать WSDL-схему, и разберем пошаговый алгоритм диагностики этой проблемы.
Описание WSDL создается платформой 1С на лету путем трансляции структуры веб-сервиса и привязанных к нему XDTO-пакетов в стандартный формат W3C XML Schema. Если на этом этапе платформа встречает некорректно описанные данные или ошибку в коде инициализации, генерация схемы сбрасывается с ошибкой 500.
Выделим ключевые факторы, вызывающие такой сбой:
TargetNamespace), отсутствуют необходимые типы или наследование выполнено с ошибкой (например, при копировании пакета), генератор схем C++ внутри платформы завершает работу аварийно.URI пространства имен веб-сервиса или XDTO-пакета.Проанализируем структуру созданного веб-сервиса в Конфигураторе. В большинстве случаев ошибка 500 возникает именно из-за нестыковок в типах XDTO.
Общие -> Web-сервисы и перейдем к проблемному сервису.XDTO-пакет в дереве метаданных. Проверим, заполнено ли свойство Пространство имен (TargetNamespace) у самого пакета и у входящих в него типов. Пространство имен не должно быть пустым.Быстрый тест для проверки: Временно заменим типы параметров и возвращаемых значений операций веб-сервиса со сложных XDTO-типов на базовые стандарты XML, например xs:string или xs:boolean. Обновим конфигурацию БД и повторно запросим ?wsdl в браузере. Если ошибка исчезла — проблема гарантированно находится внутри структуры пользовательского XDTO-пакета.
Чтобы исключить влияние программного кода 1С на этап генерации описания, проверим модуль самого веб-сервиса.
Функция ВыполнитьОперацию(Параметр1)
Возврат Истина;
КонецФункции
Сервер.Если метаданные и код проверены, но веб-сервер продолжает отдавать ошибку 500, необходимо сбросить накопленный кэш сеансов:
ragent (Агент сервера 1С:Предприятия).Администрирование -> Публикация на веб-сервере.... Убедимся, что напротив нашего веб-сервиса стоит флаг публикации.Ctrl + F5.