Почему веб-сервис 1С не работает после переименования публикации?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Причина проблемы: жесткая привязка в метаданных

Главная причина заключается в том, как объект конфигурации WS-ссылка хранит информацию о расположении сервиса. Когда вы импортируете WSDL-описание в конфигуратор, платформа считывает содержимое файла и записывает адрес сервиса (секция soap:address location) внутрь метаданных объекта.

Даже если вы изменили файл default.vrd или переименовали виртуальный каталог на веб-сервере (IIS или Apache), объект WS-ссылка в конфигурации продолжает «помнить» старый адрес. При попытке обращения к сервису из кода 1С формирует запрос по тому адресу, который был зафиксирован в момент импорта WSDL. Именно поэтому удаление старого каталога приводит к ошибке 404, а его наличие позволяет сервису «работать» по старому, уже неактуальному пути.

Решение 1: Переимпорт WSDL-описания

Если вы не хотите менять архитектуру взаимодействия, самый простой и надежный способ — обновить WS-ссылку внутри конфигуратора.

  1. Откройте конфигуратор вашей базы данных.
  2. Найдите нужный объект WS-ссылка.
  3. Выполните повторный импорт WSDL-схемы, указав новый URL вашей публикации (например, http://127.0.0.1/PVA/ws/ws1.1cws?wsdl).
  4. Сохраните изменения и обновите конфигурацию базы данных.

После этой операции WS-ссылка обновит свои внутренние метаданные и будет обращаться по корректному пути.

Решение 2: Динамическое создание прокси-объекта

Для профессиональной разработки рекомендуется избегать использования статических 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 в константу или настройки пользователя. При смене имени публикации на веб-сервере вам не потребуется пересобирать конфигурацию — достаточно будет лишь изменить значение в настройках.

На что еще стоит обратить внимание

При отладке веб-сервисов всегда учитывайте следующие моменты:

Подводя итог, разберемся еще раз: WS-ссылка — это статический объект. Его поведение жестко привязано к данным, полученным в момент импорта WSDL. Чтобы избежать проблем в будущем, старайтесь использовать динамические вызовы через WSОпределения и WSПрокси, что значительно упрощает сопровождение системы при изменении сетевой инфраструктуры.

← На главную