Разработка веб-сервисов (SOAP) и HTTP-сервисов в среде 1С:Предприятие существенно упростилась с появлением механизма расширений. Теперь мы можем добавлять новые интеграционные точки или кастомизировать существующие без изменения основной конфигурации. Однако разработчики часто сталкиваются с неприятной проблемой: код веб-сервиса в расширении успешно выполняется, но точки останова в Конфигураторе упорно игнорируются платформой. Особенно часто эта проблема проявляется при работе с файловыми базами данных.
В этой статье мы подробно разберем, почему не работает отладка веб-сервисов в расширениях конфигурации, и по шагам настроим окружение так, чтобы отладчик гарантированно перехватывал управление в нужный момент. Мы проанализируем все нюансы — от редактирования конфигурационного файла публикации до специфических параметров запуска платформы.
Прежде чем приступать к низкоуровневым настройкам веб-сервера, давайте проверим базовые параметры среды разработки. Нам необходимо убедиться, что Конфигуратор готов автоматически подключаться к сеансам, которые инициирует веб-сервер при получении внешних запросов.
Выполним следующие действия в Конфигураторе:
Без этих флагов Конфигуратор будет игнорировать внешние вызовы API, и точки останова внутри модулей расширения просто не сработают.
Одной из главных особенностей расширений является то, что их объекты (включая веб- и HTTP-сервисы) не всегда корректно регистрируются при стандартной публикации через графический интерфейс Конфигуратора. Нам необходимо явно указать платформе, что сервисы из расширений также должны быть доступны для внешних систем.
Рассмотрим порядок действий при публикации:
После этого нам обязательно нужно заглянуть внутрь конфигурационного файла публикации default.vrd. Этот файл располагается в каталоге виртуального приложения на вашем веб-сервере (например, в папке C:\inetpub\wwwroot\НашаБаза для IIS или в соответствующей директории Apache).
Откроем файл default.vrd любым текстовым редактором и проанализируем его структуру. Нам необходимо убедиться, что в нем присутствуют следующие параметры:
<webServices publishExtensionsByDefault="true">
<!-- Здесь описываются веб-сервисы -->
</webServices>
Обратим особое внимание на атрибут publishExtensionsByDefault="true". Если его значение установлено в false или атрибут отсутствует вовсе, веб-сервер не будет предоставлять доступ к сервисам, созданным внутри расширений.
Также проверим блок настроек отладки <debug>. В зависимости от используемого протокола (TCP/IP или HTTP) конфигурация должна выглядеть следующим образом:
Для современного протокола HTTP-отладки (рекомендуется для платформ версии 8.3.14 и выше):
<debug enable="true" protocol="http" url="http://localhost:1560"/>
Где http://localhost:1560 — это адрес локального или удаленного отладчика, запущенного в Конфигураторе (порт должен совпадать с тем, который указан в настройках отладки вашей платформы).
Важное правило: После любого ручного редактирования файла default.vrd или изменения структуры расширений в Конфигураторе необходимо в обязательном порядке перезапустить службу веб-сервера (IIS или Apache). Для IIS также рекомендуется перезапускать соответствующий пул приложений, чтобы сбросить кэшированное состояние конфигурации.
Платформа 1С по умолчанию запускает все подключаемые расширения в так называемом безопасном режиме. Безопасный режим накладывает жесткие ограничения на исполнение кода (например, запрещает работу с файловой системой, внешними компонентами и сетевыми ресурсами), а также блокирует возможность полноценной отладки программного кода расширения.
Выясним, как отключить это ограничение:
Без отключения безопасного режима точки останова в модулях расширения часто отображаются как «неактивные» (пустые кружки вместо красных точек), и отладчик просто проходит мимо них.
При отладке в файловом варианте базы данных разработчики часто сталкиваются с тем, что вызовы веб-сервисов и последующие за ними действия уходят в фоновые задания. В файловой базе отладка фоновых заданий сопряжена с рядом трудностей, так как сеансы фоновых заданий создаются и завершаются очень быстро.
Для решения этой проблемы в Библиотеке стандартных подсистем (БСП) предусмотрен специальный параметр запуска. Рассмотрим, как его использовать:
При запуске клиентского приложения или отладчика мы можем передать параметр командной строки /C РежимОтладки (или использовать ключ запуска в настройках отладки конфигуратора).
Этот параметр указывает БСП, что все длительные операции, которые обычно выполняются в фоновом режиме, должны выполняться синхронно, в рамках текущего основного сеанса пользователя. Это позволяет отладчику легко перехватывать выполнение кода, так как он не переходит в отдельный неуправляемый поток фонового задания.
Чтобы настроить этот параметр в Конфигураторе для тестового сеанса:
РежимОтладки.Если веб-сервис выполняет вызовы функций БСП, инициализирующих фоновые процессы, данный параметр заставит систему выполнить их в основном потоке, и отладчик успешно сработает на вашей точке останова в расширении.
В процессе активной разработки и частой модификации кода в расширении вы можете заметить, что даже при соблюдении всех условий точка останова остается неактивной. Это происходит из-за агрессивного кэширования динамических библиотек и метаданных веб-сервером (особенно этим «грешит» IIS).
Веб-сервер продолжает выполнять старый скомпилированный код расширения, который был загружен при первом обращении к сервису, в то время как вы уже внесли изменения в Конфигураторе.
Чтобы решить эту проблему и гарантировать актуальность отлаживаемого кода, проанализируем и внедрим следующее правило разработки: после каждого обновления расширения (нажатия клавиши F7 в Конфигураторе при редактировании расширения) выполняйте принудительный сброс пула приложений веб-сервера. Нажмите кнопку перезапуска в консоли управления IIS или выполните команду перезапуска службы Apache в командной строке.
Применив описанный комплексный подход к настройке, мы снимем все барьеры на пути прохождения отладочных сессий и сможем комфортно вести разработку веб-сервисов и HTTP-сервисов любой сложности внутри расширений 1С.