При разработке и интеграции сторонних систем с 1С через веб-сервисы (WS) разработчики часто сталкиваются со специфической ситуацией: запрос от стороннего клиента (например, Altova XMLSpy или Postman) корректно попадает в точку останова в Конфигураторе, а при отправке аналогичного запроса из удаленной рабочим станции или клиентского приложения 1С точка останова «проскакивает». При этом в списке подключенных предметов отладки веб-сервис появляется, но код на сервере не останавливается и изменения в базе данных не фиксируются.
Рассмотрим подробно причинно-следственные связи этой проблемы и разберем варианты её решения.
Проанализируем ситуации, которые приводят к сбоям отладки веб-сервисов:
1560–1591. Если на локальном ПК или в промежуточном сетевом оборудовании включен брандмауэр, предмет отладки успевает зарегистрироваться, но отправка сигнала об остановке на точке останова блокируется.1cv8.exe, из-за чего отладчик переходит в нерабочее состояние до перезапуска Конфигуратора или веб-сервера.default.vrd: Если в файле публикации на веб-сервере (Apache или IIS) указан параметр url="tcp://localhost:1560", то удаленные вызовы с других компьютеров не смогут перенаправить поток отладки на рабочее место разработчика.w3wp.exe) повторные WS-запросы от клиента могут попадать в разные процессы, к которым отладчик еще не успел подключиться.Самым надежным и рекомендуемым способом решения проблем с отладкой веб-сервисов, фоновых заданий и удаленных сеансов является перевод отладчика 1С на протокол HTTP. HTTP-отладка работает через единый HTTP-порт сервера отладки (dbgs) и не требует открытия входящих портов на компьютере разработчика.
Разберем по шагам настройку отладки по HTTP:
В реестре Windows или в файле службы агента сервера 1С (1cv8ws.txt / параметры службы) необходимо добавить ключевые параметры запуска -debug -http.
Пример строки запуска службы сервера 1С:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\ProgramData\1C\1cv8" -debug -http
default.vrd:
Откроем файл default.vrd в каталоге публикации веб-сервиса и убедимся, что блок отладки настроен на протокол HTTP и указывает на адрес сервера отладки (по умолчанию используется порт 1550):
<debug enable="true" protocol="http" url="http://myserver:1550" />
После внесения изменений обязательно перезапустим веб-сервер (IIS или Apache).
В Конфигураторе перейдем в меню Сервис — Параметры — Отладка. Выберем протокол HTTP и укажем адрес сервера отладки и порт (например, http://myserver:1550).
default.vrd при отладке по TCPЕсли перевод на HTTP-отладку временно недоступен, проанализируем настройки локальной сети и брандмауэра для протокола TCP:
1cv8.exe или явно разрешим диапазон TCP-портов 1560–1591.default.vrd укажем точный IP-адрес или сетевое имя ПК разработчика:
<debug enable="true" protocol="tcp" url="tcp://192.168.1.50:1560" />
Выясним дополнительную причину, по которой код может не выполнять ожидаемые действия на сервере. Если веб-сервис возвращает ответ, но изменения в базе не происходят, возможно, выполнение аварийно завершается в блоке перехвата ошибок до попадания на точку останова.
1. Это исключит ситуацию распыления запросов по разным процессам.
ЗаписьЖурналаРегистрации("ОтладкаWS",
УровеньЖурналаРегистрации.Информация,,,
"Вызов операции веб-сервиса выполнен успешно.");