Как правильно прописать пользователя в default.vrd и настроить отладку HTTP-сервиса 1С

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

При публикации информационных баз 1С на веб-серверах (Apache или IIS) часто возникает необходимость настроить автоматическую авторизацию сервисов под определенным пользователем. Для этого параметры подключения прописываются непосредственно в файле конфигурации публикации default.vrd. Разберем, как корректно указать учетные данные пользователя в строке соединения, избежав синтаксических ошибок, а также выясним причины, по которым вызовы HTTP-сервиса могут не попадать в режим отладки.

Синтаксис строки соединения в файле default.vrd

Параметры подключения к информационной базе указываются в атрибуте ib главного элемента point. Строка подключения имеет формат, аналогичный параметрам запуска 1С, где ключевые пары разделяются точкой с запятой ;.

Проанализируем типичную ошибку при составлении строки подключения. Если пропустить точку с запятой между параметрами или неправильно закрыть кавычки, платформа выведет сообщение: «1C:Enterprise 8 application error: Ошибка в строке соединения с информационной базой».

Рассмотрим правила оформления атрибута ib:

  1. Разделители: Каждый параметр (имя сервера Srvr, имя базы Ref, логин usr, пароль pwd) должен обязательно завершаться точкой с запятой ;.
  2. Экранирование кавычек в XML: Внутри XML-атрибута кавычки для значений параметров экранируются с помощью сущности ", либо не используются вовсе, если в именах пользователей и баз нет пробелов.
  3. Чувствительность к регистру: Ключевые слова 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=&quot;s1&quot;;Ref=&quot;test&quot;;usr=&quot;Prog&quot;;pwd=&quot;12345&quot;;"
       enable="false">
</point>

Если в именах параметров отсутствуют спецсимволы и пробелы, допустима упрощенная запись без кавычек внутри значений:

ib="Srvr=s1;Ref=test;usr=Prog;pwd=12345;"

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


ib="File=&quot;C:\Bases\DemoBase&quot;;usr=&quot;User&quot;;pwd=&quot;123456&quot;;"

Почему вызов HTTP-сервиса не попадает на точку останова

После успешной настройки авторизации в default.vrd часто возникает следующая проблема: при отправке HTTP-запроса веб-сервер отвечает, но точка останова в модуле HTTP-сервиса не срабатывает. Разберем по шагам возможные причины этой ситуации.

  1. Несоответствие URL-шаблона или HTTP-метода:

    Адрес HTTP-сервиса формируется по правилу: http://<сервер>/<имя_публикации>/hs/<корневой_URL>/<шаблон_URL>. Если в конфигураторе для метода задан URL-шаблон (например, /getdata), а обращение идет напрямую к http://baza61/test/hs/test без указания конкретного шаблона, платформа не сможет сопоставить запрос с обработчиком. Также проверьте, совпадает ли HTTP-метод запроса (GET, POST, PUT, DELETE) с методом, описанным в объекте метаданных.

  2. Не включен режим отладки на веб-сервере:

    Для отладки HTTP-сервисов в файле default.vrd должен присутствовать атрибут разрешающий отладку, а также указан адрес сервера отладки. Например:

    
    <point ... debug="true">
        <debug autoAttach="true" />
    </point>
    
  3. Сервер 1С запущен без ключа отладки:

    В клиент-серверном варианте служба ragent должна запускаться с ключом -debug. В противном случае серверные модули, к которым относятся и модуля HTTP-сервисов, не будут передавать отладочные данные Конфигуратору.

  4. Настройки подключения предметов отладки:

    В Конфигураторе выберите пункт меню Отладка -> Подключение. Нажмите кнопку Настройка автоматического подключения и убедитесь, что установлены флаги для HTTP-сервисов и Web-сервисов.

  5. Права доступа пользователя:

    Учетная запись, указанная в параметре usr, должна иметь роль с установленным правом Использование на данный HTTP-сервис. Если у пользователя нет прав, платформа вернет ошибку авторизации HTTP 401 или 403 до передачи управления в код модуля 1С.

Пример написания обработчика HTTP-сервиса

Рассмотрим пример правильной реализации метода 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С.

← На главную