Веб-сервис 1С открывается в браузере: публикация, адрес WSDL и вход

· 9 мин

Содержание

Чтобы обратиться к веб-сервису 1С из браузера, базу публикуют на веб-сервере (Администрирование → Публикация на веб-сервере в Конфигураторе), а затем открывают адрес вида http://сервер/имя_публикации/ws/имя_файла.1cws?wsdl. Браузер запросит логин и пароль пользователя информационной базы и покажет WSDL-описание сервиса.

Частое заблуждение: если WSDL открылся, то из браузера можно и «вызвать» операцию. Нельзя. Браузер при открытии ссылки отправляет GET-запрос, а SOAP-операции 1С ждут POST с XML-конвертом. Поэтому в браузере проверяют доступ и публикацию, а сами вызовы делают через SoapUI, Postman, curl — или переходят на HTTP-сервис, который отвечает на обычный GET.

Как устроен путь от браузера до базы 1С

Браузер не разговаривает с платформой напрямую. Между ними три звена, и сбой на любом даёт свою ошибку.

  1. 🌐 Веб-сервер (IIS или Apache) принимает запрос по адресу публикации.
  2. 🧩 Модуль расширения веб-сервера 1С — для IIS это wsisapi.dll, для Apache 2.4 — wsap24.dll в Windows или wsap24.so в Linux. Он читает файл default.vrd и понимает, к какой базе идёт запрос.
  3. 🗄️ Информационная база — файловая или на сервере 1С. Модуль открывает сеанс от имени пользователя базы и выполняет код операции веб-сервиса.

Отсюда простое правило диагностики. Ошибку 404 или 500 от самого IIS ищут на веб-сервере. Ошибку с текстом от 1С (нет прав, не найден пользователь, ошибка в модуле) ищут в базе.

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

Что проверить перед публикацией

  • ✅ При установке платформы отмечен компонент «Модули расширения веб-сервера». Без него публиковать нечего.
  • ✅ Разрядность модуля совпадает с разрядностью веб-сервера. 64-битный IIS с 32-битной платформой работать не будет, пока в пуле приложений не включено «Разрешить 32-разрядные приложения».
  • ✅ В конфигурации есть объект Общие → Web-сервисы с хотя бы одной операцией.
  • ✅ Конфигуратор запущен «от имени администратора» — иначе он не сможет записать настройки в IIS.

Публикация веб-сервиса 1С на IIS или Apache

Подготовка IIS

В Windows Server откройте «Диспетчер серверов → Добавить роли и компоненты» и включите роль «Веб-сервер (IIS)». В её составе обязательно отметьте:

  • «Расширения ISAPI»;
  • «Фильтры ISAPI»;
  • «Консоль управления IIS».

В Windows 10 и 11 то же самое включается в «Компонентах Windows»: ветка «Службы IIS → Службы Интернета → Компоненты разработки приложений».

Публикация из Конфигуратора

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

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

Публикация на Apache вручную

Если Конфигуратор не видит Apache или сервер на Linux, публикацию делают утилитой webinst из каталога bin платформы либо вручную. В httpd.conf появляется блок такого вида:

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

Alias "/trade" "C:/www/trade/"
<Directory "C:/www/trade/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/www/trade/default.vrd"
</Directory>

Путь к wsap24.dll должен указывать на ту же версию платформы, что установлена на сервере. После обновления платформы эту строку правят — частая причина «внезапно сломавшейся» публикации.

Что лежит в default.vrd

Файл описывает базу и список сервисов. Минимальный пример для серверной базы:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/trade"
       ib="Srvr=&quot;srv1c&quot;;Ref=&quot;trade&quot;;">
    <ws pointEnableCommon="true"/>
</point>

Для файловой базы строка подключения выглядит как ib="File=&quot;D:\Bases\Trade&quot;;". Кавычки внутри атрибута записываются как &quot; — обычная кавычка сломает XML, и модуль не загрузится.

Адрес веб-сервиса 1С для браузера

Адрес собирается из четырёх частей:

ЧастьПримерОткуда взять
Сервер и портhttp://srv-web или http://srv-web:8080адрес веб-сервера
Имя публикации/tradeполе «Имя» при публикации
Признак веб-сервисов/wsпостоянная часть
Файл сервиса/exchange.1cwsсвойство «Имя файла публикации» у объекта веб-сервиса

Итоговые варианты:

http://srv-web/trade/ws/exchange.1cws?wsdl   — описание сервиса (открывается в браузере)
http://srv-web/trade/ws/exchange.1cws        — точка вызова (только POST из SOAP-клиента)

«Имя файла публикации» смотрят в Конфигураторе: откройте свойства веб-сервиса в ветке Общие → Web-сервисы. Это не то же самое, что имя объекта: сервис может называться ОбменДанными, а файл публикации — exchange.1cws.

На Linux-сервере с Apache адрес чувствителен к регистру. /Trade/ws/Exchange.1cws и /trade/ws/exchange.1cws — разные адреса, и один из них вернёт 404.

Если браузер показал XML с корневым элементом definitions, списком operation и адресом в soap:address — публикация работает. Проверьте, что в soap:address стоит внешний адрес, а не localhost: именно его подхватят внешние клиенты при импорте WSDL.

Вход в веб-сервис: пользователь, пароль и права

По умолчанию модуль 1С использует базовую HTTP-аутентификацию. Браузер показывает окно входа, а введённые логин и пароль проверяются по списку пользователей информационной базы — не по учётным записям Windows.

Что настроить у пользователя

  1. В Конфигураторе (Администрирование → Пользователи) или в режиме 1С:Предприятие создайте отдельного пользователя под интеграцию, например ws_exchange.
  2. Включите «Аутентификация 1С:Предприятия» и задайте пароль.
  3. Дайте роль, которая разрешает читать и записывать ровно те данные, с которыми работает операция. Полные права служебному пользователю не нужны.

Не давайте пользователю веб-сервиса роль «Полные права». Если пароль утечёт вместе с адресом, через сервис можно будет прочитать или изменить любые данные базы.

Три настройки, из-за которых вход не проходит

  • 🔤 Латинский логин. Браузеры по-разному кодируют кириллицу в заголовке базовой аутентификации. Пользователь Обмен может стабильно получать 401 при верном пароле, а ws_exchange — входить с первого раза.
  • 🔐 HTTPS. При базовой аутентификации логин и пароль идут в каждом запросе в кодировке Base64 — это не шифрование. Для доступа из интернета публикуйте сервис только по HTTPS.
  • 🪪 Анонимный доступ в IIS. Для 1С-аутентификации в IIS у сайта должна быть включена «Анонимная проверка подлинности». Если её выключить и оставить только «Проверку подлинности Windows», IIS будет требовать доменную учётку раньше, чем запрос дойдёт до 1С.

Права на папки

Учётная запись пула приложений IIS (по умолчанию IIS AppPool\<имя пула>, для анонимного доступа — IUSR) должна иметь:

  • чтение каталога публикации с default.vrd;
  • чтение каталога bin платформы;
  • для файловой базы — чтение и запись в папку базы. Без записи сеанс не создаст файлы блокировок и упадёт.

Автоматический вход без окна логина

В default.vrd можно прописать атрибуты usr и pwd у элемента point. Тогда браузер и внешние системы входят без запроса пароля. Удобно для внутренней сети, но опасно: пароль хранится открытым текстом, а сервис доступен любому, кто знает адрес.

Ошибки при обращении к веб-сервису 1С и как их снять

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

Где смотреть подробности

  • 📜 Журнал регистрации базы (Администрирование → Журнал регистрации в режиме 1С:Предприятие или в Конфигураторе). Ошибки в коде операции и отказ в правах попадают туда с текстом и именем пользователя.
  • 📁 Логи IIS — по умолчанию в C:\inetpub\logs\LogFiles. В строке запроса видны код ответа и подкод: подкод уточняет причину отказа.
  • 🧪 Проверка с самого веб-сервера. Откройте адрес с ?wsdl прямо на сервере через http://localhost/.... Работает локально, но не снаружи — значит, мешает брандмауэр или прокси, а не 1С.

Как вызвать операцию веб-сервиса, раз браузер не умеет

Для ручной проверки удобнее всего SoapUI: создайте проект, вставьте адрес с ?wsdl, и программа сама построит шаблоны запросов ко всем операциям. Логин и пароль задаются в параметрах авторизации запроса (Basic).

Тот же вызов из командной строки через curl:

curl -u ws_exchange:Пароль \
  -H "Content-Type: text/xml; charset=utf-8" \
  --data @request.xml \
  http://srv-web/trade/ws/exchange.1cws

Файл request.xml содержит SOAP-конверт. Его проще всего скопировать из SoapUI после импорта WSDL, а не писать руками: пространство имён в конверте должно совпадать со свойством «Пространство имен URI» веб-сервиса до символа.

Свойства веб-сервиса, влияющие на доступ

СвойствоЧто даёт
Пространство имен URIИдентифицирует сервис в WSDL. Меняете — перегенерируйте клиент у всех потребителей.
Имя файла публикацииПоследняя часть адреса перед ?wsdl.
Повторное использование сеансовПозволяет не открывать новый сеанс на каждый вызов: меньше расход лицензий и быстрее ответ.
Время жизни сеансаСколько секунд простаивающий сеанс ждёт следующего вызова при повторном использовании.

Когда вместо веб-сервиса нужен HTTP-сервис

Если задача — именно открыть ссылку в браузере и увидеть результат (остаток, статус заказа, курс), SOAP здесь лишний. В 1С для этого есть HTTP-сервисы (Общие → HTTP-сервисы): они отвечают на GET, отдают JSON, XML или HTML и вызываются обычной ссылкой.

ПризнакВеб-сервис (SOAP)HTTP-сервис
Адрес/ws/имя.1cws/hs/корневой_URL/шаблон
Открыть ссылку в браузеретолько ?wsdlда, GET-метод
ФорматXML-конверт SOAPлюбой: JSON, XML, текст
Описание для клиентаWSDL генерируется самописываете вручную
Когда выбиратьконтрагент требует SOAP и WSDLсайт, мобильное приложение, быстрые проверки

Минимальный обработчик GET-метода HTTP-сервиса:

Функция СтатусGET(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Ответ.УстановитьТелоИзСтроки("{""status"":""ok""}");
    Возврат Ответ;
КонецФункции

После публикации с галочкой на вкладке HTTP-сервисов ссылка http://srv-web/trade/hs/api/status (корневой URL api, шаблон /status) откроется в браузере, запросит пароль и покажет {"status":"ok"}. Права, лицензии и ошибки 401/404 работают так же, как у веб-сервиса.

Корневой URL HTTP-сервиса задают латиницей, без кириллицы и пробелов. Кириллица в адресе кодируется браузером в %D0%..., и её неудобно передавать во внешние системы.

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

Можно ли открыть веб-сервис 1С без публикации на IIS или Apache?
Нет. Веб-сервисы 1С доступны только через модуль расширения веб-сервера. Сервер 1С и файловая база сами по себе HTTP-запросы не принимают.
Нужно ли перепубликовывать базу после добавления нового веб-сервиса?
Да, если в публикации не включена публикация всех сервисов по умолчанию. Иначе новый сервис не попадёт в default.vrd и вернёт 404.
Почему WSDL открывается, а внешняя система пишет «сервис недоступен»?
Чаще всего в soap:address стоит localhost или внутреннее имя сервера. Внешний клиент берёт адрес из WSDL и стучится туда, куда не может попасть. Публикуйте сервис под внешним именем или поправьте адрес в настройках клиента.
Можно ли передать логин и пароль прямо в адресе?
Формат http://логин:пароль@сервер/… многие современные браузеры блокируют или убирают. Для проверок используйте окно входа браузера, для интеграций — заголовок Authorization в клиенте.
Работает ли веб-сервис с файловой базой?
Да. Но все обращения идут через один файл базы, и при параллельных вызовах возможны ожидания на блокировках. Для интеграций с постоянной нагрузкой лучше клиент-серверный вариант.