При публикации информационных баз 1С на веб-серверах (Apache или IIS) часто возникает необходимость настроить автоматическую авторизацию сервисов под определенным пользователем. Для этого параметры подключения прописываются непосредственно в файле конфигурации публикации default.vrd. Разберем, как корректно указать учетные данные пользователя в строке соединения, избежав синтаксических ошибок, а также выясним причины, по которым вызовы HTTP-сервиса могут не попадать в режим отладки.
Параметры подключения к информационной базе указываются в атрибуте ib главного элемента point. Строка подключения имеет формат, аналогичный параметрам запуска 1С, где ключевые пары разделяются точкой с запятой ;.
Проанализируем типичную ошибку при составлении строки подключения. Если пропустить точку с запятой между параметрами или неправильно закрыть кавычки, платформа выведет сообщение: «1C:Enterprise 8 application error: Ошибка в строке соединения с информационной базой».
Рассмотрим правила оформления атрибута ib:
Srvr, имя базы Ref, логин usr, пароль pwd) должен обязательно завершаться точкой с запятой ;.", либо не используются вовсе, если в именах пользователей и баз нет пробелов.usr и pwd не чувствительны к регистру, но рекомендуется указывать их в нижнем регистре.Посмотрим на пример правильного оформления файла default.vrd для клиент-серверного варианта базы:
<?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="/test"
ib="Srvr="s1";Ref="test";usr="Prog";pwd="12345";"
enable="false">
</point>
Если в именах параметров отсутствуют спецсимволы и пробелы, допустима упрощенная запись без кавычек внутри значений:
ib="Srvr=s1;Ref=test;usr=Prog;pwd=12345;"
Для файлового варианта информационной базы строка подключения будет выглядеть следующим образом:
ib="File="C:\Bases\DemoBase";usr="User";pwd="123456";"
После успешной настройки авторизации в default.vrd часто возникает следующая проблема: при отправке HTTP-запроса веб-сервер отвечает, но точка останова в модуле HTTP-сервиса не срабатывает. Разберем по шагам возможные причины этой ситуации.
Адрес HTTP-сервиса формируется по правилу: http://<сервер>/<имя_публикации>/hs/<корневой_URL>/<шаблон_URL>. Если в конфигураторе для метода задан URL-шаблон (например, /getdata), а обращение идет напрямую к http://baza61/test/hs/test без указания конкретного шаблона, платформа не сможет сопоставить запрос с обработчиком. Также проверьте, совпадает ли HTTP-метод запроса (GET, POST, PUT, DELETE) с методом, описанным в объекте метаданных.
Для отладки HTTP-сервисов в файле default.vrd должен присутствовать атрибут разрешающий отладку, а также указан адрес сервера отладки. Например:
<point ... debug="true">
<debug autoAttach="true" />
</point>
В клиент-серверном варианте служба ragent должна запускаться с ключом -debug. В противном случае серверные модули, к которым относятся и модуля HTTP-сервисов, не будут передавать отладочные данные Конфигуратору.
В Конфигураторе выберите пункт меню Отладка -> Подключение. Нажмите кнопку Настройка автоматического подключения и убедитесь, что установлены флаги для HTTP-сервисов и Web-сервисов.
Учетная запись, указанная в параметре usr, должна иметь роль с установленным правом Использование на данный HTTP-сервис. Если у пользователя нет прав, платформа вернет ошибку авторизации HTTP 401 или 403 до передачи управления в код модуля 1С.
Рассмотрим пример правильной реализации метода GET в модуле HTTP-сервиса. Функция-обработчик должна возвращать объект типа HTTPСервисОтвет:
Функция Testgettest(Запрос)
// Создаем объект ответа со статусом 200 (ОК)
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
// Формируем тело ответа
РезультатСтруктура = Новый Структура;
РезультатСтруктура.Вставить("Status", "Success");
РезультатСтруктура.Вставить("Message", "Данные успешно получены");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, РезультатСтруктура);
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
Возврат Ответ;
КонецФункции
Выяснив правильный синтаксис строки соединения в default.vrd и сопоставив URL-шаблоны с вызовами клиентов, вы сможете легко публиковать и отлаживать HTTP-сервисы 1С.