К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как отладить веб-сервис в 1С: практическое руководство

Как отладить веб-сервис в 1С: включение отладки на сервере, точки останова в HTTP-сервисах, тестирование запросов, типичные ошибки и способы их диагностики.

Отладка веб-сервиса в 1С отличается от обычной отладки кода тем, что исполнение происходит на стороне сервера (или в отдельном процессе публикации), а не в клиентском приложении. Поэтому стандартный запуск конфигуратора с точкой останова часто не срабатывает: отладчик просто не подключается к нужному сеансу. Чтобы поймать исполнение обработчика операции или HTTP-метода, нужно правильно настроить публикацию, включить отладку на сервере и подключить конфигуратор к конкретному сеансу.

Проблемы с веб-сервисами проявляются по-разному: клиент получает ошибку 500, пустой ответ, неверные данные или тайм-аут. Без отладки найти причину можно только по журналу регистрации и логам веб-сервера, что долго и неточно. Правильно настроенная отладка позволяет пройти код обработчика по шагам, посмотреть значения параметров запроса и точно определить строку, где происходит сбой.

Материал охватывает оба типа сервисов платформы 1С:Предприятие — классические SOAP веб-сервисы и HTTP-сервисы (REST-подобные). Подходы к их отладке во многом совпадают, но есть отличия в публикации и тестировании, которые разобраны ниже.

Почему точка останова в веб-сервисе не срабатывает

Наиболее частая жалоба разработчика: точка останова установлена в модуле веб-сервиса, запрос отправлен, но отладчик не останавливается. Причина почти всегда в том, что код веб-сервиса выполняется в другом процессе — в рабочем процессе сервера 1С или в процессе веб-сервера (для файловой базы), а конфигуратор автоматически подключается только к клиентскому сеансу, запущенному из него.

Вторая типичная причина — на сервере не включена отладка. По умолчанию кластер серверов 1С работает с отладкой выключенной, и сервер просто игнорирует точки останова. Третья причина — устаревшая публикация: вы изменили код в конфигураторе, но не обновили публикацию, и веб-сервер обращается к старой версии базы или к другой информационной базе вообще.

Отладка на сервере выключенаСервер игнорирует точки останова

Проверить параметр запуска агента сервера

Нет подключения к сеансуКонфигуратор следит только за своим клиентом

Подключиться через Отладка — Подключение

Устаревшая публикацияВеб-сервер работает со старым кодом

Обновить публикацию и перезапустить веб-сервер

Запрос не доходит до 1СОшибка на уровне веб-сервера

Проверить логи IIS или Apache

Включение отладки на сервере 1С

Для клиент-серверного варианта работы отладка включается на уровне службы агента сервера. Нужно остановить службу агента сервера 1С, добавить в параметры её запуска ключ отладки и снова запустить службу. В Windows это делается через реестр в параметре ImagePath соответствующей службы, в Linux — в скрипте запуска.

text
"C:\Program Files\1cv8\<версия>\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug

Ключ -debug разрешает отладку по протоколу TCP. Если планируется отладка по HTTP (актуально для современных версий платформы), дополнительно указывается параметр -debugHTTP и настраивается публикация отладчика. После перезапуска службы проверьте, что сервер запустился без ошибок — ошибка в строке параметров приводит к тому, что служба не стартует вообще.

Для файловой базы всё проще: отладка включается в конфигураторе через «Сервис — Параметры», где выбирается протокол отладки, а сама база публикуется на локальном веб-сервере с признаком отладки. В диалоге публикации (Администрирование — Публикация на веб-сервере) есть флажок, разрешающий отладку для этой публикации.

Публикация веб-сервиса и её проверка

Веб-сервис становится доступен только после публикации на веб-сервере (IIS или Apache). В конфигураторе откройте «Администрирование — Публикация на веб-сервере», укажите имя публикации, каталог и отметьте нужные типы сервисов: веб-сервисы, HTTP-сервисы или оба варианта. После публикации перезапустите веб-сервер, чтобы он подхватил изменения.

Проверить доступность SOAP веб-сервиса можно, открыв в браузере URL вида http://server/base/ws/ИмяСервиса?wsdl. Если в ответ приходит XML-описание (WSDL), публикация работает. Для HTTP-сервиса проверка зависит от шаблона URL: откройте адрес вида http://server/base/hs/корневойURL/путь — даже ошибка 405 или ответ обработчика подтверждают, что запрос доходит до 1С.

Контрольные точки

Как проверить публикацию

Открытие ?wsdl в браузере
Норма

Возвращается XML-описание сервиса

Тревожный признак

Ошибка 404 или 500 — публикация не настроена

Запрос к HTTP-сервису
Норма

Ответ обработчика или осмысленная ошибка

Тревожный признак

404 — не совпадает шаблон URL или публикация

Логи веб-сервера
Норма

Запросы фиксируются со статусом 200/500

Тревожный признак

Запросов нет — проблема до уровня 1С

Подключение конфигуратора к сеансу веб-сервиса

Когда сервер работает в режиме отладки, а сервис опубликован, остаётся подключить отладчик к нужному сеансу. В конфигураторе откройте «Отладка — Подключение». Если список сеансов пуст, включите флажок отображения сеансов, подключённых к другим информационным базам, или сеансов, ожидающих отладки. Сеанс веб-сервиса появляется в списке только в момент обработки запроса, поэтому порядок такой: сначала отправьте запрос, затем быстро обновите список подключений.

Нюанс в том, что сеанс веб-сервиса живёт недолго — пока выполняется запрос. Если код обработчика короткий, вы можете не успеть подключиться. Практический приём: поставьте точку останова заранее и в параметрах отладки включите автоматическое подключение к новым сеансам нужного типа (веб-сервис, HTTP-сервис). Тогда отладчик подхватит сеанс сам при первом же запросе.

Порядок подключения отладчика
  1. 1
    Включите режим отладки на сервере и перезапустите службу
  2. 2
    Обновите публикацию веб-сервиса и перезапустите веб-сервер
  3. 3
    В конфигураторе откройте Отладка — Подключение и настройте автоматическое подключение к сеансам веб/HTTP-сервисов
  4. 4
    Поставьте точку останова в модуле сервиса
  5. 5
    Отправьте тестовый запрос из SoapUI, Postman или браузера
  6. 6
    Убедитесь, что выполнение остановилось на точке останова

Тестирование SOAP веб-сервиса через SoapUI

Для SOAP-сервисов удобнее всего использовать SoapUI: создайте проект, указав URL WSDL, и инструмент сам построит шаблоны запросов для всех операций. Заполните параметры, отправьте запрос — и, если отладчик подключён, выполнение остановится на точке останова в модуле веб-сервиса.

При тестировании обращайте внимание на аутентификацию. Если публикация настроена с проверкой подлинности, в SoapUI нужно указать логин и пароль пользователя 1С (Basic-аутентификация). Ошибка 401 означает, что запрос отклонён ещё до входа в код сервиса — отлаживать там нечего, сначала решите вопрос с доступом.

Типичные ошибки SOAP-запросов

Ошибка вида «Операция не найдена» означает, что имя операции в запросе не совпадает с именем в конфигурации. Ошибки сериализации (невозможно преобразовать параметр) возникают при несовпадении типов XDTO — проверьте пакеты XDTO в конфигурации и фактическую структуру XML в запросе. Текст faultstring в ответе SOAP обычно содержит точное описание проблемы.

Отладка HTTP-сервисов

HTTP-сервисы отлаживаются по той же схеме: отладка на сервере, публикация, подключение к сеансу. Различие в тестировании: запросы удобно отправлять из Postman, curl или даже браузера (для GET-методов). В модуле HTTP-сервиса точка останова ставится в функции-обработчике шаблона URL, например в ПолучитьДанныеGET.

bsl
Функция ПолучитьДанныеGET(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	Параметры = Запрос.ПараметрыЗапроса;
	// точка останова здесь — можно посмотреть содержимое Запрос
	Ответ.УстановитьТелоИзСтроки("{}");
	Возврат Ответ;
КонецФункции

В отладчике доступны все свойства объекта HTTPСервисЗапрос: заголовки, параметры строки запроса, тело, метод. Это позволяет проверить, что именно прислал клиент, и где теряются или искажаются данные — например, при неверной кодировке тела запроса.

Диагностика без отладчика: журнал регистрации и логи

Не всегда есть возможность включить отладку — например, на продуктивном сервере. В этом случае основные инструменты — журнал регистрации и логи веб-сервера. В коде обработчика добавьте запись в журнал регистрации через ЗаписьЖурналаРегистрации с ключевыми данными запроса: параметрами, этапом выполнения, текстом ошибки из ОписаниеОшибки().

Логи IIS (каталог inetpub\logs) или Apache (access.log, error.log) показывают, дошёл ли запрос до веб-сервера и с каким HTTP-кодом он завершился. Если в логах веб-сервера запроса нет — проблема на уровне сети, брандмауэра или неверного URL, и к 1С она отношения не имеет. Технологический журнал платформы (при его включении) даёт самую детальную картину, включая тексты запросов к СУБД и исключения.

Типичные ошибки при отладке
01
Отладка включена, но служба сервера не перезапущена — ключ -debug не применился
02
Точка останова в общем модуле с признаком «Клиент», а код выполняется на сервере
03
Изменили код, но не обновили публикацию — отлаживается старая версия
04
Тестируют запрос из браузера с Basic-аутентификацией, не указав пользователя 1С
05
Ищут причину в коде, хотя запрос не проходит аутентификацию (ошибка 401/403)

Частые ошибки и их признаки

Ошибка 500 без внятного описания чаще всего означает необработанное исключение в коде обработчика. Оберните логику в Попытка/Исключение и возвращайте осмысленный ответ с кодом и текстом ошибки — это упростит диагностику и для вас, и для потребителей сервиса. Ошибка 404 — неверный URL публикации, имя сервиса или шаблон HTTP-сервиса. Ошибка 401/403 — проблемы аутентификации и прав доступа.

Отдельный класс проблем — тайм-ауты. Если обработчик выполняет тяжёлый запрос к базе, веб-сервер может оборвать соединение раньше, чем 1С вернёт ответ. В отладчике такой код выглядит зависшим на длинной операции. Решение — оптимизация запроса или увеличение тайм-аутов на веб-сервере, но второе — паллиатив.

Маршрут решения

Как выбрать способ диагностики

Есть доступ к тестовому серверу и конфигураторуВключайте отладку и проходите код по шагам — это самый быстрый путь
Проблема только на продуктиве, отладку включить нельзяДобавьте записи в журнал регистрации и анализируйте логи веб-сервера
Запрос вообще не доходит до 1СПроверяйте URL, публикацию, брандмауэр и логи веб-сервера
Сервис отвечает, но данные неверныеОтлаживайте обработчик: смотрите входящие параметры и логику формирования ответа
Итог

Что важно запомнить

Отладка веб-сервиса в 1С требует трёх условий: включённой отладки на сервере, актуальной публикации и подключения конфигуратора к сеансу сервиса. Запросы тестируйте через SoapUI или Postman, а на продуктиве используйте журнал регистрации и логи веб-сервера.

Часто задаваемые вопросы

Можно ли отладить веб-сервис в файловой базе без сервера 1С?

Да. Опубликуйте базу на локальном веб-сервере (IIS или Apache) с включённым флажком отладки в настройках публикации, выберите протокол отладки в параметрах конфигуратора и подключитесь к сеансу веб-сервиса через «Отладка — Подключение». Отдельный сервер приложений для этого не нужен.

Почему сеанс веб-сервиса не появляется в списке подключений?

Сеанс существует только во время выполнения запроса и закрывается сразу после ответа. Настройте автоматическое подключение к сеансам нужного типа в параметрах отладки или временно добавьте в начало обработчика задержку (цикл ожидания), чтобы успеть подключиться вручную.

Точка останова стоит, код точно выполняется, но остановки нет. Что проверить?

Проверьте по порядку: включена ли отладка на сервере (ключ -debug и перезапуск службы), подключён ли конфигуратор к правильной информационной базе, обновлена ли публикация после изменения кода, не стоит ли точка в клиентском общем модуле, который не выполняется на сервере.

Как отладить сервис, если запрос приходит от внешней системы по расписанию?

Включите автоматическое подключение отладчика к сеансам веб-сервисов и оставьте конфигуратор открытым с точкой останова. Когда внешняя система отправит запрос, отладчик подхватит сеанс автоматически. Альтернатива — повторить запрос вручную из SoapUI или Postman, скопировав его параметры.

Чем отличается отладка по TCP от отладки по HTTP?

Отладка по TCP — классический протокол, работающий внутри локальной сети. Отладка по HTTP появилась в новых версиях платформы и позволяет отлаживать через веб-сервер, что удобно при работе через интернет или когда порты отладки закрыты. Для HTTP-отладки требуется отдельная настройка публикации и параметр -debugHTTP у агента сервера.