При настройке интеграции между информационными базами через веб-сервисы разработчики нередко сталкиваются с ситуацией: в веб-браузере схема WSDL открывается корректно, а при попытке добавить WS-ссылку в Конфигураторе 1С возникает ошибка вида Ошибка работы с Интернет: ресурс не найден (404) с внутренним пояснением Текущему соединению с информационной базой не назначен сеанс. Разберем детально механику возникновения этой ошибки и выясним, какие шаги необходимо предпринять для ее быстрого устранения.
Рассмотрим подробнее, почему веб-сервер выдает код 404 вместо стандартного запроса авторизации. В работе связки платформы 1С и веб-сервера (в особенности Apache) есть несколько критических нюансов:
default.vrd сервис зарегистрирован как tradeEx.1cws, а в Конфигураторе мы запрашиваем TradeEx.1cws, веб-сервер не сможет найти целевую точку входа и вернет ошибку.401 Unauthorized сервер нередко возвращает 404 Not Found. Из-за этого Конфигуратор не запрашивает у пользователя логин и пароль, а сразу прерывает добавление метаданных.Проанализируем файл дескриптора публикации информационной базы. Этот файл называется default.vrd и находится в каталоге публикации на веб-сервере. Разберем по шагам, на что обратить внимание:
default.vrd любым текстовым редактором и найдем секцию ws.
<ws>
<service name="TradeExchange"
url="tradeEx.1cws"
enable="true"/>
</ws>
url указано tradeEx.1cws с маленькой буквы, то и в строке подключения WSDL в Конфигураторе мы обязаны указать:
http://192.168.12.34/InfoBase3/ws/tradeEx.1cws?wsdl
Если в базе включена аутентификация, обойти проблему отсутствия окна авторизации в Конфигураторе можно путем указания логина и пароля непосредственно в формате URL. Разберем синтаксис такой строки:
http://ИмяПользователя:Пароль@192.168.12.34/InfoBase3/ws/tradeEx.1cws?wsdl
В этом случае платформа сразу отправляет заголовок базовой аутентификации Authorization: Basic, сеанс стартует без промежуточных проверок, и Конфигуратор успешно считывает описание веб-сервиса.
Если сетевые ограничения, прокси или настройки безопасности веб-сервера продолжают блокировать прямой запрос из Конфигуратора, воспользуемся обходным путем загрузки схемы:
C:\TradeEx.wsdl).file:///C:/TradeEx.wsdl
Создание статической WS-ссылки в дереве метаданных имеет существенный недостаток: при любом изменении структуры методов сервиса на стороне источника нам придется обновлять конфигурацию в режиме предприятия. Чтобы сделать интеграцию более гибкой, посмотрим на пример программного создания прокси с помощью объектов WSОпределения и WSПрокси:
АдресWSDL = "http://192.168.12.34/InfoBase3/ws/tradeEx.1cws?wsdl";
ИмяПользователя = "Администратор";
ПарольПользователя = "SecretPass123";
// Создаем объект определений с передачей учетных данных
Определения = Новый WSОпределения(АдресWSDL, ИмяПользователя, ПарольПользователя);
URIПространстваИмен = "http://www.sample-package.org";
ИмяСервиса = "TradeExchange";
ТочкаПодключения = "TradeExchangeSoap";
// Инициализируем прокси
Прокси = Новый WSПрокси(Определения, URIПространстваИмен, ИмяСервиса, ТочкаПодключения);
Прокси.Пользователь = ИмяПользователя;
Прокси.Пароль = ПарольПользователя;
// Вызываем метод веб-сервиса
Результат = Прокси.ВыполнитьВыгрузку();
При таком подходе мы передаем параметры авторизации динамически, что позволяет легко менять учетные записи и адреса публикации без изменения метаданных конфигурации.
Если веб-сервер упорно не передает данные учетной записи в платформу 1С, проверим конфигурационный файл httpd.conf. В некоторых случаях требуется явно разрешить передачу авторизационных заголовков расширению 1С. Для этого добавим директиву:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
После внесения правок перезапустим службу веб-сервера Apache и повторим попытку подключения к веб-сервису.