При интеграции мобильных приложений или внешних систем с 1С через веб-сервисы разработчики часто сталкиваются с неочевидной ошибкой: «При создании описания сервиса произошла ошибка. URL сервиса код ответа сервера 500». Эта проблема критична, так как она означает, что внешняя система даже не смогла получить структуру сервиса (WSDL), не говоря уже о вызове конкретных методов. Рассмотрим подробно, как диагностировать и устранить причины этого сбоя.
Прежде чем приступать к отладке кода, нам необходимо выяснить, на каком этапе происходит сбой. Самый простой и эффективный способ — попробовать открыть WSDL-описание веб-сервиса напрямую в браузере. Для этого сформируем ссылку по шаблону:
http://[АдресСервера]/[ИмяПубликации]/ws/[ИмяСервиса]?wsdl
Разберем, что мы можем увидеть:
Файл default.vrd является связующим звеном между веб-сервером (Apache или IIS) и платформой 1С. Проанализируем его содержимое. Ошибки в этом файле часто приводят к тому, что веб-сервер не может корректно проинициализировать расширение 1С.
Проверьте следующие моменты в default.vrd:
ws совпадает с именем веб-сервиса в дереве метаданных конфигурации 1С (важен регистр!).point.ib указана актуальная строка соединения.Многие ошибочно полагают, что если сервис «не взлетел», то в Журнале регистрации (ЖР) ничего не будет. Это не так. Нам нужно проанализировать ЖР на стороне главной базы:
Для более глубокой проверки мы можем прописать собственные отладочные логи в модуле Сеанса или в самом модуле веб-сервиса. Рассмотрим пример кода для логирования:
Процедура ПриУстановкеПараметровСеанса(ТребуемыеПараметры)
ЗаписьЖурналаРегистрации("МойВебСервис.Диагностика",
УровеньЖурналаРегистрации.Информационный, , ,
"Инициализация сеанса для пользователя: " + ИмяПользователя());
КонецПроцедуры
Ошибка 500 часто возникает, если в модуле веб-сервиса есть ошибки, которые компилятор обнаруживает только в момент обращения. Выясним причину, проверив код на соответствие контексту:
Веб-сервисы работают в контексте сервера. Проанализируем, нет ли в модуле обращений к процедурам или функциям, доступным только в клиентском приложении. Весь код в модуле веб-сервиса должен быть доступен серверу.
Используйте директивы компиляции правильно:
#Если Сервер Тогда
Функция ПолучитьДанныеДляМобильного(Идентификатор)
// Основная логика работы
Возврат "Данные получены";
КонецФункции
#КонецЕсли
Если внутри веб-сервиса вы вызываете функции из общих модулей, убедитесь, что у этих модулей установлены флаги «Сервер» и «Вызов сервера». Для автоматического поиска некорректных вызовов процедур и функций общих модулей можно использовать конфигурацию для анализа ошибок в коде конфигураций и расширений.
Проанализируем права пользователя, под которым осуществляется подключение. Ошибки дескриптора и создания описания часто связаны с нехваткой прав:
Веб-сервис в дереве прав роли.Поскольку ошибка 500 генерируется веб-сервером, нам необходимо заглянуть в его системные логи. Рассмотрим ситуацию для IIS:
IIS-W3SVC-WP или связанные с ISAPI-модулем 1С. Там может быть указан конкретный файл библиотеки (например, wsapvrn.dll), вызвавший сбой.Также важно убедиться, что разрядность установленной платформы 1С соответствует разрядности веб-сервера. Если вы используете 64-битный IIS, убедитесь, что в пуле приложений разрешены 32-битные приложения (если установлена 32-битная 1С), или используйте 64-битную платформу 1С.
Если подключение идет по протоколу HTTPS, мобильные устройства ведут себя гораздо строже, чем десктопные системы. Разберем возможные нюансы:
Если используется самоподписанный сертификат, мобильное приложение может обрывать соединение на этапе проверки безопасности, что сервер интерпретирует как некорректный запрос и выдает 500. Для проверки попробуйте временно опубликовать сервис по HTTP. Если по HTTP всё работает, значит, нужно добавить ваш сертификат в доверенные на мобильном устройстве или использовать сертификат от доверенного центра сертификации.
Если ни один из шагов не помог, выполним проверку методом исключения. Создадим в конфигурации новый, абсолютно пустой веб-сервис с одной функцией, которая просто возвращает строку:
Функция Тест()
Возврат "ОК";
КонецФункции
Опубликуем его и попробуем вызвать. Если пустой сервис работает — проблема в коде, XDTO-пакетах или правах доступа основного сервиса. Если даже пустой сервис выдает 500 — проблема в настройке веб-сервера, публикации или самой платформе 1С.