Почему 1С не видит вторую операцию веб-сервиса и как это исправить

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

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

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

Когда мы добавляем вторую, третью или последующую операцию в существующий веб-сервис, платформа должна обновить WSDL-описание (язык описания веб-сервисов). Однако на пути этого обновления стоят несколько уровней кэширования и технических нюансов. Разберем ситуацию поэтапно: мы изменили метаданные в конфигураторе, нажали «Опубликовать», но клиентская база или стороннее приложение все еще работает по старому контракту.

Основные причины возникновения проблемы:

  1. Кэширование на стороне веб-сервера (Apache или IIS). Модуль расширения 1С может удерживать старое состояние публикации в памяти рабочих процессов.
  2. Некорректное обновление файла .vrd. Файл описания публикации может не обновиться или содержать ошибки в структуре после внесения изменений.
  3. Клиентский кэш WSDL. Вызывающая база 1С сохраняет описание сервиса во временных файлах сеанса.
  4. Статические ссылки в конфигурации. Если используется объект WS-ссылка, он требует ручного обновления.

Шаг 1. Проверка файла публикации (.vrd)

Первым делом проанализируем файл .vrd, который находится в каталоге публикации на веб-сервере. Именно в этом файле содержится описание того, какие веб-сервисы и операции доступны внешнему миру. Иногда при «ленивой» публикации через конфигуратор изменения не фиксируются в файле должным образом.

Рассмотрим пример структуры файла default.vrd. В нем должен быть раздел ws, где перечислены ваши сервисы. Важно убедиться, что атрибут enable=true установлен для нужного сервиса. Хотя операции внутри сервиса обычно не перечисляются в .vrd индивидуально (они генерируются динамически платформой), сам факт корректности этого файла критичен.

Если есть сомнения, попробуем следующий алгоритм:

  1. Зайдем в каталог публикации на диске.
  2. Полностью удалим все файлы из этой папки (предварительно остановив веб-сервер).
  3. Выполним повторную публикацию из конфигуратора.

Шаг 2. Очистка кэша на стороне вызывающей базы

Часто проблема кроется не в том, что сервис «не отдает» операцию, а в том, что клиент «не хочет» ее видеть. Если мы используем динамическое создание прокси через Новый WSПрокси, платформа кэширует WSDL во временных папках пользователя.

Проанализируем программный код создания подключения:


Определения = Новый WSОпределения(URL_WSDL, Логин, Пароль);
Прокси = Новый WSПрокси(Определения, URI_ПространстваИмен, ИмяСервиса, ИмяПорта);

Для того чтобы принудительно обновить описание, попробуем очистить локальный кэш 1С на компьютере, с которого выполняется вызов. Также полезно проверить доступность новой операции через обычный браузер. Введем адрес вида http://server/base/ws/service?wsdl. Если в открывшемся XML-коде мы видим описание новой операции (ищем тег <operation name="ИмяНовойОперации">), значит, серверная часть работает корректно, и проблему нужно искать исключительно на стороне клиента.

Шаг 3. Радикальное решение — смена каталога публикации

Как показывает практика и опыт участников форума, самым быстрым и надежным способом решения проблемы «невидимой» операции является перепубликация в новый каталог с новым именем (алиасом). Это позволяет обойти все уровни кэширования веб-сервера и платформы.

Разберем по шагам, как это сделать:

  1. Откроем конфигуратор и перейдем в меню Администрирование — Публикация на веб-сервере.
  2. Изменим имя публикации в поле «Имя» (например, было MyService, сделаем MyServiceV2).
  3. Укажем новый пустой каталог на диске в поле «Каталог».
  4. Нажмем кнопку «Опубликовать».
  5. В вызывающей базе обновим адрес подключения на новый.

Этот метод заставляет веб-сервер (например, Apache) создать новую запись в httpd.conf и инициализировать совершенно новые рабочие процессы для обработки запросов, что исключает использование старых данных из памяти.

Шаг 4. Нюансы пространства имен (Namespace)

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

Рекомендация: При внесении значимых изменений в структуру веб-сервиса (добавление методов или изменение параметров), хорошей практикой считается изменение пространства имен. Например, с www.company.ru/integration на www.company.ru/integration/v2. Это гарантирует, что все клиенты будут вынуждены обновить свои определения.

Дополнительные технические проверки

Проанализируем настройки веб-сервера Apache, если вы используете именно его. Иногда в файле httpd.conf могут оставаться старые записи (алиасы), которые ссылаются на те же физические каталоги, создавая конфликт. Проверьте, чтобы путь к библиотеке расширения 1С (wsap24.dll или аналогичной) соответствовал версии установленной платформы.

Также не забудем про права доступа. После перепубликации убедитесь, что у пользователя, под которым запущен веб-сервер (например, USR1CV8 или SYSTEM), есть полные права на чтение и выполнение в новом каталоге публикации.

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

← На главную