При публикации и отладке SOAP веб-сервисов в среде 1С:Предприятие 8.3 разработчики нередко сталкиваются с ситуацией, когда привычное обращение к сервису через веб-браузер возвращает ошибку «Имя сервиса не задано». При этом информационная база через веб-клиент открывается без сбоев, публикация на веб-сервере (Apache или IIS) выполнена штатно, но получить WSDL-описание или вызвать методы сервиса из внешних систем не удается. Разберем по шагам, почему возникает эта ошибка, как изменилось поведение платформы и как правильно настроить подключение сторонних клиентов.
Для начала проанализируем, как описывается публикация веб-сервисов в конфигурационном файле default.vrd. При ручном формировании или выгрузке из конфигуратора публикация SOAP-сервисов выглядит следующим образом:
<?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="/gos4"
ib="Srvr="ad.reality:1741";Ref="gos4";">
<ws publishExtensionsByDefault="true">
<point name="InterfaceVersion"
alias="InterfaceVersion.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="CreateStatementDepartments"
alias="createsd.1cws"
enable="true"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</ws>
<httpServices publishByDefault="false"/>
<standardOdata enable="true"/>
</point>
Посмотрим на параметры секции ws. Атрибут name задает имя объекта метаданных веб-сервиса в дереве конфигурации 1С, а атрибут alias определяет виртуальный путь (псевдоним), по которому этот сервис слушает входящие сообщения.
В более старых версиях платформы (8.1 и ранних сборках 8.2) при вводе в браузере ссылки вида http://хост/база/ws/InterfaceVersion.1cws веб-сервер мог автоматически перенаправлять пользователя на схему описания WSDL. Начиная с версии 8.3 механизм работы модуля расширения веб-сервера 1С изменился:
.1cws больше не является физическим файлом на диске — это лишь виртуальный алиас в системе ресурсов платформы.Разберем, как получить структуру XML-схемы WSDL в браузере или внешнем приложении. Чтобы модуль веб-сервера 1С вернул техническое описание контракта, необходимо явно запросить WSDL с помощью суффикса ?wsdl:
http://127.0.0.1:8080/gos4/ws/InterfaceVersion.1cws?wsdlhttp://127.0.0.1:8080/gos4/ws/InterfaceVersion?wsdlОбратим внимание на регистр символов: путь /ws/, а также имена сервисов и их псевдонимов чувствительны к регистру, особенно при использовании веб-сервера Apache под любой операционной системой.
После получения корректной ссылки на WSDL разработчики часто сталкиваются со следующей проблемой: при попытке импортировать URL в утилиту тестирования (например, SoapUI) возникает ошибка авторизации, либо в Журнале регистрации 1С вовсе отсутствуют записи о попытке входа. Выясним причину такого поведения.
Классическая схема базовой аутентификации HTTP Basic Authentication работает так: клиент делает первоначальный запрос без заголовков, сервер отвечает кодом 401 Unauthorized с заголовком WWW-Authenticate, после чего клиент повторяет запрос с логином и паролем. Модуль веб-сервисов 1С при обращении к WSDL не всегда корректно инициирует challenge-запрос, из-за чего клиент завершает сессию с ошибкой, даже не попытавшись передать учетные данные.
Чтобы обойти эту проблему, применим упреждающую авторизацию (Preemptive Authentication), при которой учетные данные отправляются сразу в первом запросе:
http://Логин:Пароль@127.0.0.1:8080/gos4/ws/InterfaceVersion?wsdlЕсли после указания параметров запрос все равно не доходит до информационной базы, проверим окружение веб-сервера и настройки безопасности в 1С:
httpd.conf убедимся, что включена передача заголовка авторизации в модуль 1С, добавив директиву:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
ib файла default.vrd указаны жестко заданные параметры Usr и Pwd, платформа всегда подключается под этой системной учетной записью. Если требуется персонализированная авторизация внешних систем, параметры Usr и Pwd из строки соединения следует удалить.Web-сервис.Рассмотренный комплекс мер полностью решает проблемы с отображением WSDL-схемы веб-сервисов на платформе 1С:Предприятие 8.3 и обеспечивает стабильное взаимодействие с внешними SOAP-клиентами.