При разработке и публикации веб-сервисов на веб-серверах (Apache или IIS) разработчики часто сталкиваются с ситуацией: пока в информационной базе не было ни одного пользователя, веб-сервис и его WSDL-описание открывались без проблем. Однако как только в конфигураторе создается первый пользователь, прямое обращение через браузер по ссылке вида http://localhost/eduweb/ws/otvet.1cws?wsdl возвращает ошибку в формате JSON или XML со статусом 404/500 и текстом «Текущему соединению с информационной базой не назначен сеанс».
Проанализируем ситуацию, выясним внутреннюю причину такого поведения платформы 1С:Предприятие и разберем все способы решения проблемы.
Когда информационная база пуста и в ней нет пользователей, платформа разрешает анонимный вход. Веб-сервер автоматически инициирует сеанс от имени неавторизованного пользователя.
Как только в списке пользователей появляется хотя бы одна учетная запись, для базы активируется обязательная аутентификация. При прямом запросе через веб-браузер запрос отправляется анонимно (без HTTP-заголовка Authorization). Модуль расширения веб-сервера 1С не получает учетных данных, не может стартовать сеанс в базе и возвращает внутреннее исключение платформы Текущему соединению с информационной базой не назначен сеанс.
Поскольку веб-расширение 1С в ряде версий возвращает тело ошибки с внутренним кодом вместо стандартного HTTP-заголовка WWW-Authenticate, браузер не всегда отображает стандартное всплывающее окно для ввода логина и пароля.
Если веб-сервис вызывается программно из другой базы 1С, учетные данные необходимо передавать объекту WSПрокси или WSОпределения. Посмотрим на пример кода подключения к веб-сервису с явным указанием логина и пароля:
Определения = Новый WSОпределения("http://localhost/eduweb/ws/otvet.1cws?wsdl", "user", "321");
Прокси = Новый WSПрокси(Определения, "http://www.sample-package.org", "otvet", "otvetSoap");
Прокси.Пользователь = "user";
Прокси.Пароль = "321";
// Вызов операции веб-сервиса
Результат = Прокси.ПолучитьДанные();
В этом случае платформа передает заголовок базовой аутентификации (Basic Auth), сеанс в базе успешно создается под указанной учетной записью, и ошибка не возникает.
Если требуется, чтобы веб-сервер подключался к информационной базе всегда под одной и той же сервисной учетной записью (например, для открытого получения схемы WSDL или интеграций без Basic Auth), можно прописать логин и пароль в файле дескриптора публикации default.vrd.
Разберем по шагам, как отредактировать файл публикации:
default.vrd.default.vrd в текстовом редакторе.ib в корневом теге point и добавим параметры Usr и Pwd.Для файловой информационной базы строка подключения примет следующий вид:
ib="File="C:\Bases\eduweb";Usr="user";Pwd="321";"
Для клиент-серверной базы (SQL):
ib="Srvr="Server1C";Ref="eduweb";Usr="user";Pwd="321";"
После сохранения изменений в файле default.vrd обязательно перезапустим службу веб-сервера Apache или пул приложений IIS.
Важное ограничение: если в дальнейшем выполнить повторную публикацию через Конфигуратор (меню «Администрирование -> Публикация на веб-сервере»), файл default.vrd будет перезаписан платформой заново, и вручную добавленные параметры Usr и Pwd могут сброситься.
Если необходимо открыть WSDL-описание в браузере без изменения default.vrd, воспользуемся сессионной авторизацией:
http://localhost/eduweb/).http://localhost/eduweb/ws/otvet.1cws?wsdl. Браузер переиспользует существующий сеанс, и схема WSDL отобразится корректно.Проанализируем параметры созданного пользователя в Конфигураторе, чтобы исключить сопутствующие ошибки доступа: