Как исправить ошибку «Текущему соединению с информационной базой не назначен сеанс» при вызове веб-сервиса 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При настройке обмена данными между мобильным приложением и серверной информационной базой 1С разработчики часто сталкиваются с ошибкой HTTP Status 500 - Внутренняя ошибка сервера со следующим описанием в теле ответа:

Ошибка работы сеанса: Текущему соединению с информационной базой не назначен сеанс

Проанализируем природу возникновения этой ошибки и разберем по шагам надежные способы ее устранения.

Причины возникновения ошибки

Выясним причину такого поведения платформы. Ошибка указывает на то, что сетевое подключение к веб-серверу (Apache или IIS) и кластеру серверов 1С успешно установлено, однако платформа 1С:Предприятие не смогла инициализировать рабочий сеанс. Основные факторы, вызывающие данный сбой:

  1. Отсутствие авторизационных данных. Входящий запрос поступает анонимно (без HTTP-заголовка Authorization), а в информационной базе нет пользователя с пустым паролем или отключена возможность анонимного входа.
  2. Перехват заголовков веб-сервером. Веб-сервер Apache или его модули аутентификации могут перехватывать и отсекать заголовок Authorization, из-за чего модуль 1С wsap24.dll не получает переданные клиентом учетные данные.
  3. Некорректная работа пула сеансов. При включенном переиспользовании сеансов (параметр reuseSessions="autouse" в default.vrd) веб-сервер пытается направить запрос в сеанс, который уже был принудительно завершен кластером 1С (например, по таймауту или при перезапуске рабочего процесса rphost).

Способ 1. Указание пользователя и пароля в файле default.vrd

Рассмотрим самое быстрое решение, позволяющее авторизовать соединение на уровне файла описания публикации. Откроем файл default.vrd, расположенный в каталоге публикации базы на веб-сервере, и добавим параметры Usr и Pwd в атрибут ib:


<?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="/WorkCRM"
        ib="Srvr=&quot;localhost&quot;;Ref=&quot;WorkCRM&quot;;Usr=&quot;WebExchangeUser&quot;;Pwd=&quot;SecretPassword123&quot;;"
        allowexecutescheduledjobs="off">
    <ws>
        <point name="ВебОбмен"
                alias="ws1.1cws"
                enable="true"
                reuseSessions="autouse"
                sessionMaxAge="500"
                poolSize="10"
                poolTimeout="5"/>
    </ws>
</point>

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

Способ 2. Программная передача учетных данных из мобильного приложения

Разберем более гибкий и безопасный подход, при котором учетные данные передаются непосредственно из кода клиентского приложения 1С. В этом случае в default.vrd логин и пароль прописывать не требуется.

Посмотрим на пример правильной инициализации объектов WSОпределения и WSПрокси:


АдресWSDL = "http://192.168.0.10:8089/WorkCRM/ws/ws1.1cws?wsdl";
ИмяПользователя = "WebExchangeUser";
ПарольПользователя = "SecretPassword123";

// 1. Создаем определения веб-сервиса с передачей логина и пароля
Определения = Новый WSОпределения(
    АдресWSDL, 
    ИмяПользователя, 
    ПарольПользователя, 
    , 
    10
);

URIПространстваИмен = "http://localhost/ws1";
ИмяСервиса = "ВебОбмен";
ИмяТочкиПодключения = "ВебОбменSoap";

// 2. Создаем прокси и явно задаем реквизиты авторизации
Прокси = Новый WSПрокси(
    Определения, 
    URIПространстваИмен, 
    ИмяСервиса, 
    ИмяТочкиПодключения
);

Прокси.Пользователь = ИмяПользователя;
Прокси.Пароль = ПарольПользователя;

// 3. Вызываем операцию сервиса
Результат = Прокси.ВыполнитьОбмен();

При таком подходе каждый клиент мобильного приложения может передавать собственные учетные данные, что сохранит детальный аудит действий в журнале регистрации 1С.

Способ 3. Отключение пула сеансов при нестабильной работе

Если ошибка возникает периодически при длительных интервалах между вызовами, проанализируем параметры переиспользования сеансов. При нестабильных каналах связи или динамическом перезапуске процессов 1С повторное использование сеансов может давать сбой. Для отключения пула сеансов изменим атрибут reuseSessions в файле default.vrd:


<ws>
    <point name="ВебОбмен"
            alias="ws1.1cws"
            enable="true"
            reuseSessions="dontuse"/>
</ws>

Параметр reuseSessions="dontuse" гарантирует, что каждый входящий запрос будет создавать чистый сеанс и корректно уничтожать его по завершении работы метода, исключая попытки обращения к "зависшим" или закрытым сеансам кластера.

Проверка доступности сервиса через браузер

Разберем способ быстрой диагностики. Чтобы проверить, решена ли проблема на стороне сервера, выполним GET-запрос к описанию веб-сервиса через любой браузер:

http://<АдресСервера>:<Порт>/<ИмяПубликации>/ws/<АлиасСервиса>?wsdl

Если авторизация и публикация настроены верно, браузер вернет XML-документ с WSDL-схемой веб-сервиса (или запросит логин и пароль базовой HTTP-аутентификации) вместо ответа с кодом 500.

← На главную