В процессе разработки интеграций на платформе 1С:Предприятие программисты часто сталкиваются с загадочным поведением веб-сервисов: вы добавляете новую операцию в конфигураторе, обновляете публикацию, но вызывающая сторона (клиент) упорно «видит» только старый состав методов. В этой статье мы подробно разберем, почему так происходит, и как гарантированно обновить описание веб-сервиса, чтобы все изменения стали доступны.
Когда мы добавляем вторую, третью или последующую операцию в существующий веб-сервис, платформа должна обновить WSDL-описание (язык описания веб-сервисов). Однако на пути этого обновления стоят несколько уровней кэширования и технических нюансов. Разберем ситуацию поэтапно: мы изменили метаданные в конфигураторе, нажали «Опубликовать», но клиентская база или стороннее приложение все еще работает по старому контракту.
Основные причины возникновения проблемы:
WS-ссылка, он требует ручного обновления.Первым делом проанализируем файл .vrd, который находится в каталоге публикации на веб-сервере. Именно в этом файле содержится описание того, какие веб-сервисы и операции доступны внешнему миру. Иногда при «ленивой» публикации через конфигуратор изменения не фиксируются в файле должным образом.
Рассмотрим пример структуры файла default.vrd. В нем должен быть раздел ws, где перечислены ваши сервисы. Важно убедиться, что атрибут enable=true установлен для нужного сервиса. Хотя операции внутри сервиса обычно не перечисляются в .vrd индивидуально (они генерируются динамически платформой), сам факт корректности этого файла критичен.
Если есть сомнения, попробуем следующий алгоритм:
Часто проблема кроется не в том, что сервис «не отдает» операцию, а в том, что клиент «не хочет» ее видеть. Если мы используем динамическое создание прокси через Новый WSПрокси, платформа кэширует WSDL во временных папках пользователя.
Проанализируем программный код создания подключения:
Определения = Новый WSОпределения(URL_WSDL, Логин, Пароль);
Прокси = Новый WSПрокси(Определения, URI_ПространстваИмен, ИмяСервиса, ИмяПорта);
Для того чтобы принудительно обновить описание, попробуем очистить локальный кэш 1С на компьютере, с которого выполняется вызов. Также полезно проверить доступность новой операции через обычный браузер. Введем адрес вида http://server/base/ws/service?wsdl. Если в открывшемся XML-коде мы видим описание новой операции (ищем тег <operation name="ИмяНовойОперации">), значит, серверная часть работает корректно, и проблему нужно искать исключительно на стороне клиента.
Как показывает практика и опыт участников форума, самым быстрым и надежным способом решения проблемы «невидимой» операции является перепубликация в новый каталог с новым именем (алиасом). Это позволяет обойти все уровни кэширования веб-сервера и платформы.
Разберем по шагам, как это сделать:
MyService, сделаем MyServiceV2).Этот метод заставляет веб-сервер (например, Apache) создать новую запись в httpd.conf и инициализировать совершенно новые рабочие процессы для обработки запросов, что исключает использование старых данных из памяти.
Выясним еще одну неочевидную причину: Пространство имен. Платформа 1С очень чувствительна к уникальности URI пространства имен веб-сервиса. Если вы добавили операцию, но не обновили версию пространства имен, некоторые механизмы десериализации могут игнорировать новые элементы, считая их не соответствующими старому контракту.
Рекомендация: При внесении значимых изменений в структуру веб-сервиса (добавление методов или изменение параметров), хорошей практикой считается изменение пространства имен. Например, с www.company.ru/integration на www.company.ru/integration/v2. Это гарантирует, что все клиенты будут вынуждены обновить свои определения.
Проанализируем настройки веб-сервера Apache, если вы используете именно его. Иногда в файле httpd.conf могут оставаться старые записи (алиасы), которые ссылаются на те же физические каталоги, создавая конфликт. Проверьте, чтобы путь к библиотеке расширения 1С (wsap24.dll или аналогичной) соответствовал версии установленной платформы.
Также не забудем про права доступа. После перепубликации убедитесь, что у пользователя, под которым запущен веб-сервер (например, USR1CV8 или SYSTEM), есть полные права на чтение и выполнение в новом каталоге публикации.
Подведем итог: если одна операция видна, а вторая — нет, последовательно проверьте WSDL в браузере, очистите кэш сеанса 1С и, в случае неудачи, выполните «чистую» публикацию в новый каталог. Это стандартный и наиболее эффективный путь решения проблем с обновлением веб-сервисов в экосистеме 1С.