Подключение к SOAP-сервису 1С: от публикации базы до первого вызова

· 9 мин

Содержание

Чтобы подключиться к Web-сервису 1С, базу публикуют на веб-сервере (IIS или Apache) с включённой галочкой «Публиковать Web-сервисы», а затем обращаются к описанию по адресу вида http://сервер/имя_публикации/ws/ИмяСервиса.1cws?wsdl. Открылся XML с описанием операций — сервис доступен, его можно подключать из другой базы 1С, из SoapUI или из любой внешней системы.

Выбор веб-сервера зависит от инфраструктуры. На Windows проще всего IIS: он уже есть в системе. Apache берут, когда сервер на Linux или когда нужна одна и та же схема публикации на разных площадках. Сама 1С работает с обоими одинаково, разница только в модуле расширения и в том, где лежат настройки.

Что подготовить в конфигурации и платформе

Подключиться можно только к тому, что уже описано в конфигурации. Web-сервис — это объект метаданных в ветке Общие → Web-сервисы. Если его нет, публиковать нечего: в типовых конфигурациях часть сервисов уже есть, свои добавляют в Конфигураторе или расширением.

Проверьте у объекта Web-сервиса три вещи:

  • 🔹 Имя файла публикации — то, что появится в адресе перед .1cws. Например, Exchange.1cws.
  • 🔹 URI пространства имён — например, http://www.example.org/exchange. Он понадобится клиенту при создании прокси.
  • 🔹 Операции и их модуль — у каждой операции указана процедура-обработчик в модуле сервиса, параметры и тип возвращаемого значения.

Пример обработчика простой операции Ping, которая отвечает строкой с временем сервера:

Функция Ping()
    Возврат "OK " + Формат(ТекущаяДатаСеанса(), "ДФ='yyyy-MM-dd HH:mm:ss'");
КонецФункции

На стороне платформы нужен компонент «Модули расширения веб-сервера». Его выбирают при установке 1С:Предприятия. Если компонент не ставили, запустите установщик той же версии платформы повторно, выберите «Изменить» и отметьте его.

Разрядность модуля должна совпадать с разрядностью веб-сервера. 64-битный Apache не загрузит 32-битный wsap24.dll, а пул IIS с включённым режимом 32-битных приложений не загрузит 64-битный wsisapi.dll.

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

IIS или Apache: какой веб-сервер выбрать

КритерийIISApache 2.4
ОСТолько WindowsWindows и Linux
Модуль 1Сwsisapi.dllwsap24.dll / wsap24.so
Где настройкиДиспетчер служб IIS, web.confighttpd.conf (или файл в conf.d)
УстановкаКомпонент WindowsОтдельный дистрибутив
Когда братьСервер 1С на Windows, есть администратор WindowsLinux, контейнеры, единая схема на разных серверах

Подготовка IIS

В Windows Server откройте Диспетчер серверов → Добавить роли и компоненты → Веб-сервер (IIS). В службах роли отметьте:

  1. Расширения ISAPI и Фильтры ISAPI — без них модуль 1С не загрузится.
  2. Обычная проверка подлинности — если сервис будет принимать логин и пароль в заголовке.
  3. Проверка подлинности Windows — только если планируете вход по учётной записи домена.
  4. Консоль управления IIS — для настройки.

После публикации проверьте пул приложений. Для 32-битной платформы в дополнительных параметрах пула включают «Разрешить 32-разрядные приложения», для 64-битной — выключают.

Подготовка Apache

Apache 2.4 ставят из дистрибутива ОС (на Linux) или из сборки под Windows. Перед публикацией убедитесь, что служба запускается и стартовая страница открывается. Иначе вы не поймёте, кто виноват в ошибке: Apache или 1С.

Публикация базы на веб-сервере

Есть два способа: через окно Конфигуратора и через утилиту webinst. Результат одинаковый — каталог публикации с файлом default.vrd и запись в настройках веб-сервера.

Способ 1. Через Конфигуратор

  1. Запустите Конфигуратор от имени администратора Windows. Без повышенных прав он не сможет записать настройки IIS или httpd.conf.
  2. Откройте Администрирование → Публикация на веб-сервере....
  3. Укажите Имя публикации латиницей, например trade. Это часть адреса.
  4. Выберите веб-сервер и каталог, например C:\inetpub\wwwroot\trade.
  5. На вкладке Web-сервисов отметьте «Публиковать Web-сервисы» и поставьте галочки у нужных сервисов в списке.
  6. Нажмите «Опубликовать». Для Apache Конфигуратор попросит перезапустить службу — согласитесь.

Публикуйте только те сервисы, которые нужны внешней системе. Каждый лишний сервис — лишняя точка входа в базу.

Способ 2. Утилитой webinst

Утилита лежит в каталоге bin платформы. Она удобна для скриптов и для Linux, где Конфигуратора с окном публикации может не быть под рукой.

Публикация клиент-серверной базы на Apache в Windows:

cd "C:\Program Files\1cv8\8.3.24.1548\bin"
webinst -publish -apache24 -wsdir trade -dir "C:\Apache24\htdocs\trade" -connstr "Srvr=srv1c;Ref=trade;" -confpath "C:\Apache24\conf\httpd.conf"

Публикация файловой базы на IIS:

webinst -publish -iis -wsdir trade -dir "C:\inetpub\wwwroot\trade" -connstr "File=""D:\Bases\Trade"";"

Номер версии в пути подставьте свой. После webinst откройте default.vrd и проверьте, что нужные Web-сервисы в нём включены.

Что внутри default.vrd

Этот XML-файл — главная настройка публикации. Фрагмент с Web-сервисами выглядит так:

<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/trade"
       ib="Srvr=&quot;srv1c&quot;;Ref=&quot;trade&quot;;">
  <ws enable="true" pointEnableCommon="false">
    <point name="Exchange" alias="Exchange.1cws" enable="true"/>
  </ws>
</point>
  • base — путь в адресе;
  • ib — строка подключения к базе;
  • alias — имя файла сервиса в адресе;
  • enable="false" у конкретного point выключает один сервис, не трогая остальные.

Для Apache в httpd.conf при публикации добавляются строка загрузки модуля и блок каталога. Пример строки:

LoadModule _1cws_module "C:/Program Files/1cv8/8.3.24.1548/bin/wsap24.dll"

После обновления платформы именно эта строка чаще всего указывает на удалённый каталог старой версии.

Права доступа и безопасность Web-сервиса

У Web-сервиса два уровня доступа: веб-сервер и сама база 1С. Пройти нужно оба.

Пользователь 1С

Клиент передаёт логин и пароль пользователя базы. Обычно через HTTP Basic-аутентификацию: в заголовке запроса, в кодировке Base64. Под этим пользователем выполняется код операции, значит ему нужны права на все данные, которые операция читает или пишет.

Правильная схема — отдельный служебный пользователь:

  • 👤 имя вроде ws_exchange, без входа в обычный интерфейс;
  • 🔐 роль только с теми правами, которые нужны операциям сервиса;
  • 🚫 не «Полные права» и не администратор.

Если операция обращается к справочнику, на который у пользователя нет прав, клиент получит SOAP-ошибку с текстом о нарушении прав доступа. Это поведение 1С, а не сбой публикации.

Логин внутри публикации

В окне публикации или в default.vrd можно задать пользователя и пароль прямо в настройках (атрибуты usr и pwd). Тогда клиент подключается без логина, а 1С сама входит под указанным пользователем.

Пароль в default.vrd хранится открытым текстом. Такой способ допустим только во внутренней сети, с ограничением доступа к каталогу публикации и с минимальными правами у этого пользователя.

Права на файлы и сеть

  • 📁 Файловая база. Учётной записи веб-сервера нужны права на чтение и запись в каталог базы. Для IIS это группа IIS_IUSRS или удостоверение пула приложений, для Apache — учётная запись, от которой запущена служба.
  • 🌐 Клиент-серверная база . Веб-сервер должен видеть сервер 1С по сети: порт агента 1540, менеджера кластера 1541 и диапазон рабочих процессов, который задан в свойствах рабочего сервера.
  • 🔒 Доступ снаружи. Basic-аутентификация без HTTPS передаёт пароль почти в открытом виде. Для доступа из интернета включайте HTTPS с действующим сертификатом и ограничивайте адреса, с которых разрешено подключение.

Проверка: открываем WSDL и вызываем операцию

Проверяйте по шагам, от простого к сложному. Так сразу видно, на каком уровне проблема.

  1. Веб-сервер жив. Откройте http://сервер/ — должна открыться стартовая страница IIS или Apache.
  2. WSDL отдаётся. Откройте http://сервер/trade/ws/Exchange.1cws?wsdl. Браузер спросит логин и пароль пользователя 1С, затем покажет XML с операциями.
  3. Операция выполняется. Вызовите её из SoapUI или curl.

Пример вызова Ping через curl (пространство имён — из свойств сервиса):

curl -u ws_exchange:Pa55word -H "Content-Type: text/xml; charset=utf-8" ^
  --data "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ex=\"http://www.example.org/exchange\"><soap:Body><ex:Ping/></soap:Body></soap:Envelope>" ^
  http://srv-web/trade/ws/Exchange.1cws

В ответ придёт конверт SOAP со строкой OK и датой.

Если WSDL открывается, а вызов падает, публикация в порядке. Ищите проблему в коде операции, в правах пользователя или в формате запроса.

Подключение к Web-сервису из другой базы 1С

Из 1С к чужому SOAP-сервису подключаются двумя способами.

Статически: через WS-ссылку

  1. В Конфигураторе откройте Общие → WS-ссылки, нажмите «Добавить».
  2. Укажите адрес WSDL и логин с паролем. Конфигуратор скачает описание и покажет сервисы, точки подключения и операции.
  3. В коде создайте прокси по ссылке:
Прокси = WSСсылки.ОбменСТорговлей.СоздатьWSПрокси(
    "http://www.example.org/exchange", "Exchange", "ExchangeSoap");
Прокси.Пользователь = "ws_exchange";
Прокси.Пароль = "Pa55word";
Ответ = Прокси.Ping();
Сообщить(Ответ);

Плюс — работает без доступа к WSDL в момент выполнения. Минус — после изменения сервиса ссылку нужно обновить и изменить конфигурацию .

Динамически: WSОпределения и WSПрокси

Этот вариант не меняет конфигурацию, его можно запустить из внешней обработки:

АдресWSDL = "http://srv-web/trade/ws/Exchange.1cws?wsdl";
Определения = Новый WSОпределения(АдресWSDL, "ws_exchange", "Pa55word");
Прокси = Новый WSПрокси(Определения,
    "http://www.example.org/exchange", "Exchange", "ExchangeSoap");
Прокси.Пользователь = "ws_exchange";
Прокси.Пароль = "Pa55word";
Ответ = Прокси.Ping();
Сообщить(Ответ);

Имя точки подключения 1С формирует как имя сервиса плюс Soap или Soap12 — смотрите его в WSDL в элементе port. Логин передают дважды: в WSОпределения для скачивания описания и в свойствах прокси для вызова операций.

Если в WSDL в адресе точки подключения стоит localhost или внутреннее имя, которое не открывается с клиента, задайте адрес вручную через свойство Прокси.ТочкаПодключения или поправьте адрес, по которому клиент обращается за WSDL.

Ошибки при подключении и как их убрать

Диагностика: выберите симптом

После любых правок в httpd.conf или настройках пула службу веб-сервера перезапускают.

Перезапуск Apache или пула IIS обрывает текущие запросы ко всем публикациям на этом сервере, в том числе веб-клиент и HTTP-сервисы. Делайте его в нерабочее время или предупредите пользователей.

Частые вопросы

Чем Web-сервис 1С отличается от HTTP-сервиса?
Web-сервис работает по SOAP: XML-конверты и описание в WSDL. HTTP-сервис принимает обычные HTTP-запросы с любым телом, чаще JSON. Публикуются они в одном окне, но отдельными галочками.
Можно ли опубликовать Web-сервис для файловой базы?
Да. В строке подключения указывают File= и путь к каталогу базы. Учётной записи веб-сервера нужны права на этот каталог.
Нужно ли переопубликовывать базу после изменения операций сервиса?
Если поменялся только код операций — нет, достаточно обновить конфигурацию базы данных. Если добавили новый Web-сервис — да, его нужно включить в публикации.
Как подключиться к Web-сервису 1С из PHP, Python или C#?
Любым SOAP-клиентом, который умеет читать WSDL: укажите адрес ?wsdl и логин с паролем пользователя 1С для Basic-аутентификации. Пространство имён и имя операции клиент возьмёт из описания.
Почему при каждом вызове долго ждать первого ответа?
Каждый вызов без повторного использования сеансов открывает новый сеанс 1С. Настройте повторное использование сеансов в параметрах точки Web-сервиса в публикации, чтобы не тратить время на вход.