При настройке обмена данными между мобильным приложением и серверной информационной базой 1С разработчики часто сталкиваются с ошибкой HTTP Status 500 - Внутренняя ошибка сервера со следующим описанием в теле ответа:
Ошибка работы сеанса: Текущему соединению с информационной базой не назначен сеанс
Проанализируем природу возникновения этой ошибки и разберем по шагам надежные способы ее устранения.
Выясним причину такого поведения платформы. Ошибка указывает на то, что сетевое подключение к веб-серверу (Apache или IIS) и кластеру серверов 1С успешно установлено, однако платформа 1С:Предприятие не смогла инициализировать рабочий сеанс. Основные факторы, вызывающие данный сбой:
Authorization), а в информационной базе нет пользователя с пустым паролем или отключена возможность анонимного входа.Authorization, из-за чего модуль 1С wsap24.dll не получает переданные клиентом учетные данные.reuseSessions="autouse" в default.vrd) веб-сервер пытается направить запрос в сеанс, который уже был принудительно завершен кластером 1С (например, по таймауту или при перезапуске рабочего процесса rphost).Рассмотрим самое быстрое решение, позволяющее авторизовать соединение на уровне файла описания публикации. Откроем файл 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="localhost";Ref="WorkCRM";Usr="WebExchangeUser";Pwd="SecretPassword123";"
allowexecutescheduledjobs="off">
<ws>
<point name="ВебОбмен"
alias="ws1.1cws"
enable="true"
reuseSessions="autouse"
sessionMaxAge="500"
poolSize="10"
poolTimeout="5"/>
</ws>
</point>
Важно: если логин и пароль указываются непосредственно в файле публикации, все входящие запросы будут выполняться в контексте прав этой учетной записи. Для безопасности заведите отдельного пользователя с минимально необходимым набором прав, ограниченным только вызовом нужных веб-сервисов.
Разберем более гибкий и безопасный подход, при котором учетные данные передаются непосредственно из кода клиентского приложения 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С.
Если ошибка возникает периодически при длительных интервалах между вызовами, проанализируем параметры переиспользования сеансов. При нестабильных каналах связи или динамическом перезапуске процессов 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.