Подключение к SOAP-сервису 1С: от публикации базы до первого вызова
Содержание
Чтобы подключиться к 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: какой веб-сервер выбрать
| Критерий | IIS | Apache 2.4 |
|---|---|---|
| ОС | Только Windows | Windows и Linux |
| Модуль 1С | wsisapi.dll | wsap24.dll / wsap24.so |
| Где настройки | Диспетчер служб IIS, web.config | httpd.conf (или файл в conf.d) |
| Установка | Компонент Windows | Отдельный дистрибутив |
| Когда брать | Сервер 1С на Windows, есть администратор Windows | Linux, контейнеры, единая схема на разных серверах |
Подготовка IIS
В Windows Server откройте Диспетчер серверов → Добавить роли и компоненты → Веб-сервер (IIS). В службах роли отметьте:
- Расширения ISAPI и Фильтры ISAPI — без них модуль 1С не загрузится.
- Обычная проверка подлинности — если сервис будет принимать логин и пароль в заголовке.
- Проверка подлинности Windows — только если планируете вход по учётной записи домена.
- Консоль управления IIS — для настройки.
После публикации проверьте пул приложений. Для 32-битной платформы в дополнительных параметрах пула включают «Разрешить 32-разрядные приложения», для 64-битной — выключают.
Подготовка Apache
Apache 2.4 ставят из дистрибутива ОС (на Linux) или из сборки под Windows. Перед публикацией убедитесь, что служба запускается и стартовая страница открывается. Иначе вы не поймёте, кто виноват в ошибке: Apache или 1С.
Публикация базы на веб-сервере
Есть два способа: через окно Конфигуратора и через утилиту webinst. Результат одинаковый — каталог публикации с файлом default.vrd и запись в настройках веб-сервера.
Способ 1. Через Конфигуратор
- Запустите Конфигуратор от имени администратора Windows. Без повышенных прав он не сможет записать настройки IIS или
httpd.conf. - Откройте
Администрирование → Публикация на веб-сервере.... - Укажите Имя публикации латиницей, например
trade. Это часть адреса. - Выберите веб-сервер и каталог, например
C:\inetpub\wwwroot\trade. - На вкладке Web-сервисов отметьте «Публиковать Web-сервисы» и поставьте галочки у нужных сервисов в списке.
- Нажмите «Опубликовать». Для 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="srv1c";Ref="trade";">
<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 и вызываем операцию
Проверяйте по шагам, от простого к сложному. Так сразу видно, на каком уровне проблема.
- Веб-сервер жив. Откройте
http://сервер/— должна открыться стартовая страница IIS или Apache. - WSDL отдаётся. Откройте
http://сервер/trade/ws/Exchange.1cws?wsdl. Браузер спросит логин и пароль пользователя 1С, затем покажет XML с операциями. - Операция выполняется. Вызовите её из 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-ссылку
- В Конфигураторе откройте
Общие → WS-ссылки, нажмите «Добавить». - Укажите адрес WSDL и логин с паролем. Конфигуратор скачает описание и покажет сервисы, точки подключения и операции.
- В коде создайте прокси по ссылке:
Прокси = 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-сервисы. Делайте его в нерабочее время или предупредите пользователей.