Веб-сервис 1С открывается в браузере: публикация, адрес WSDL и вход
Содержание
Чтобы обратиться к веб-сервису 1С из браузера, базу публикуют на веб-сервере (Администрирование → Публикация на веб-сервере в Конфигураторе), а затем открывают адрес вида http://сервер/имя_публикации/ws/имя_файла.1cws?wsdl. Браузер запросит логин и пароль пользователя информационной базы и покажет WSDL-описание сервиса.
Частое заблуждение: если WSDL открылся, то из браузера можно и «вызвать» операцию. Нельзя. Браузер при открытии ссылки отправляет GET-запрос, а SOAP-операции 1С ждут POST с XML-конвертом. Поэтому в браузере проверяют доступ и публикацию, а сами вызовы делают через SoapUI, Postman, curl — или переходят на HTTP-сервис, который отвечает на обычный GET.
Как устроен путь от браузера до базы 1С
Браузер не разговаривает с платформой напрямую. Между ними три звена, и сбой на любом даёт свою ошибку.
- 🌐 Веб-сервер (IIS или Apache) принимает запрос по адресу публикации.
- 🧩 Модуль расширения веб-сервера 1С — для IIS это
wsisapi.dll, для Apache 2.4 —wsap24.dllв Windows илиwsap24.soв Linux. Он читает файлdefault.vrdи понимает, к какой базе идёт запрос. - 🗄️ Информационная база — файловая или на сервере 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 → Службы Интернета → Компоненты разработки приложений».
Публикация из Конфигуратора
- Откройте базу в Конфигураторе от имени администратора Windows.
- Выберите
Администрирование → Публикация на веб-сервере. - В поле «Имя» задайте короткое латинское имя без пробелов, например
trade. Оно станет частью адреса. - В поле «Веб-сервер» выберите IIS или нужную версию Apache.
- «Каталог» — папка, куда запишется
default.vrd. Для IIS обычно подпапка вC:\inetpub\wwwroot\. - Перейдите на вкладку веб-сервисов. Отметьте «Публиковать Web-сервисы» и галочкой — каждый сервис, который должен быть доступен.
- Нажмите «Опубликовать». На вопрос о перезапуске веб-сервера ответьте «Да».
Перезапуск 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="srv1c";Ref="trade";">
<ws pointEnableCommon="true"/>
</point>
Для файловой базы строка подключения выглядит как ib="File="D:\Bases\Trade";". Кавычки внутри атрибута записываются как " — обычная кавычка сломает 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С:Предприятие создайте отдельного пользователя под интеграцию, напримерws_exchange. - Включите «Аутентификация 1С:Предприятия» и задайте пароль.
- Дайте роль, которая разрешает читать и записывать ровно те данные, с которыми работает операция. Полные права служебному пользователю не нужны.
Не давайте пользователю веб-сервиса роль «Полные права». Если пароль утечёт вместе с адресом, через сервис можно будет прочитать или изменить любые данные базы.
Три настройки, из-за которых вход не проходит
- 🔤 Латинский логин. Браузеры по-разному кодируют кириллицу в заголовке базовой аутентификации. Пользователь
Обменможет стабильно получать 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%..., и её неудобно передавать во внешние системы.