Часто при разработке или переносе веб-сервисов на платформе 1С:Предприятие разработчики сталкиваются с ситуацией, когда после изменения имени публикации (например, с PV на PVA) сервис перестает отвечать на запросы. В этой статье мы разберем, почему так происходит, где 1С «запоминает» старые пути и как правильно настроить взаимодействие между конфигурацией и веб-сервером.
Главная причина заключается в том, как объект конфигурации WS-ссылка хранит информацию о расположении сервиса. Когда вы импортируете WSDL-описание в конфигуратор, платформа считывает содержимое файла и записывает адрес сервиса (секция soap:address location) внутрь метаданных объекта.
Даже если вы изменили файл default.vrd или переименовали виртуальный каталог на веб-сервере (IIS или Apache), объект WS-ссылка в конфигурации продолжает «помнить» старый адрес. При попытке обращения к сервису из кода 1С формирует запрос по тому адресу, который был зафиксирован в момент импорта WSDL. Именно поэтому удаление старого каталога приводит к ошибке 404, а его наличие позволяет сервису «работать» по старому, уже неактуальному пути.
Если вы не хотите менять архитектуру взаимодействия, самый простой и надежный способ — обновить WS-ссылку внутри конфигуратора.
WS-ссылка.WSDL-схемы, указав новый URL вашей публикации (например, http://127.0.0.1/PVA/ws/ws1.1cws?wsdl).После этой операции WS-ссылка обновит свои внутренние метаданные и будет обращаться по корректному пути.
Для профессиональной разработки рекомендуется избегать использования статических WS-ссылок, так как они делают конфигурацию зависимой от сетевых настроек. Вместо этого лучше использовать динамическое создание прокси-объекта непосредственно в коде.
Рассмотрим пример того, как это реализовать:
// Определяем параметры соединения
АдресWSDL = "http://localhost/PVA/ws/ws1.1cws?wsdl";
ИмяСервиса = "Hello";
ИмяТочки = "HelloSoap";
Логин = "User";
Пароль = "Password";
// Создаем определение и прокси
WSОпр = Новый WSОпределения(АдресWSDL, Логин, Пароль);
WSСервис = WSОпр.Сервисы.Найти(ИмяСервиса, "http://www.yournamespace.ru");
WSПрокси = Новый WSПрокси(WSОпр, WSСервис.URIПространстваИмен, ИмяСервиса, ИмяТочки);
// Вызываем метод сервиса
Результат = WSПрокси.МетодВашегоСервиса();
Используя такой подход, вы можете вынести строку адреса АдресWSDL в константу или настройки пользователя. При смене имени публикации на веб-сервере вам не потребуется пересобирать конфигурацию — достаточно будет лишь изменить значение в настройках.
При отладке веб-сервисов всегда учитывайте следующие моменты:
WSDL-описания. Если изменения не вступили в силу, очистите кэш клиентских приложений и, при необходимости, перезапустите службу веб-сервера.default.vrd. Убедитесь, что параметр base соответствует новому имени публикации. В секции ws проверьте соответствие имен точек (point name) и их псевдонимов (alias).PVA настроен верно и имеет доступ к файлу default.vrd и расширению 1cws.Подводя итог, разберемся еще раз: WS-ссылка — это статический объект. Его поведение жестко привязано к данным, полученным в момент импорта WSDL. Чтобы избежать проблем в будущем, старайтесь использовать динамические вызовы через WSОпределения и WSПрокси, что значительно упрощает сопровождение системы при изменении сетевой инфраструктуры.