HTTPСоединение: какой сервер указывать при обмене между серверными базами 1С

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

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

Разделяем веб-сервер и сервер приложений 1С

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

Важно понимать: HTTPСоединение обращается не напрямую к кластеру серверов 1С, а к веб-серверу, на котором опубликована информационная база. Рассмотрим разницу:

  1. Сервер 1С (Srvr) — это сервер, где работает служба кластера (rmngr, rphost). Его имя мы видим в строке подключения к базе.
  2. Веб-сервер — это сервер, на котором установлен IIS или Apache и выполнена публикация HTTP-сервисов 1С.

Выясним у системного администратора именно DNS-имя или IP-адрес сервера, где настроена публикация. Даже если база данных расположена на сервере sgp08gs036, веб-сервер может находиться на другом узле, например, web-gate.company.ru. Именно его нужно указывать в конструкторе объекта.

Уходим от «хардкода»: создание гибких настроек

Прописывать адрес сервера прямо в коде — плохая практика. Если администратор изменит имя сервера или порт, придется вносить правки в конфигурацию или расширение. Разберем, как сделать настройки гибкими.

Рекомендуется создать справочник (например, «НастройкиИнтеграций») или использовать регистр сведений для хранения параметров подключения. Рассмотрим пример структуры данных, которую стоит хранить:

Посмотрим на пример кода, который динамически получает эти данные:


ДанныеПодключения = ПолучитьНастройкиИзСправочника(); // Ваша функция получения данных
АдресСервера = ДанныеПодключения.Адрес;
Порт = ДанныеПодключения.Порт;
Логин = ДанныеПодключения.Пользователь;
Пароль = ДанныеПодключения.Пароль;

// Инициализируем соединение с использованием полученных параметров
HTTPСоединение = Новый HTTPСоединение(АдресСервера, Порт, Логин, Пароль);

Работа с портами и защищенным соединением (HTTPS)

В локальных условиях мы привыкли к стандартному 80-му порту. Однако в рабочих базах безопасность выходит на первый план. Рассмотрим, как настроить соединение через HTTPS. Для этого в 1С используется объект ЗащищенноеСоединениеOpenSSL.

Проанализируем ситуацию, когда веб-сервер требует сертификат или просто работает по защищенному протоколу:


ИспользоватьSSL = Истина; // Флаг из наших настроек
Если ИспользоватьSSL Тогда
    Защита = Новый ЗащищенноеСоединениеOpenSSL();
Иначе
    Защита = Неопределено;
КонецЕсли;

HTTPСоединение = Новый HTTPСоединение(
    АдресСервера, 
    Порт, 
    Логин, 
    Пароль, 
    , // Прокси
    Таймаут, 
    Защита
);

Если порт отличается от стандартного (например, администратор назначил 8080 или 4443), его обязательно нужно передать вторым параметром. Если оставить поле пустым, 1С будет пытаться подключиться по 80-му порту, что приведет к ошибке в серверной среде.

Метод для проверки подключения (Ping)

Чтобы администратор или пользователь мог проверить работоспособность обмена, не запуская сам процесс выгрузки данных, реализуем механизм проверки связи. Для этого в целевом HTTP-сервисе (например, в Документообороте) создадим простейший метод GET с именем ping.

Разберем код функции проверки на стороне базы-отправителя:


Функция ПроверитьПодключение() Экспорт
    Параметры = ПолучитьНастройки();
    Соединение = Новый HTTPСоединение(Параметры.Адрес, Параметры.Порт, Параметры.Логин, Параметры.Пароль);
    Запрос = Новый HTTPЗапрос(Параметры.КорневойURL + "/hs/exkado/ping");
    
    Попытка
        Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            Сообщить("Соединение успешно установлено!");
            Возврат Истина;
        Иначе
            Сообщить("Ошибка авторизации или пути. Код: " + Ответ.КодСостояния);
            Возврат Ложь;
        КонецЕсли;
    Исключение
        Сообщить("Не удалось установить связь с сервером: " + ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;
КонецФункции

Таймауты и стабильность в промышленной эксплуатации

В отличие от домашнего ПК, серверная сеть может быть подвержена нагрузкам. Если запрос «подвиснет», это может заблокировать сеанс пользователя или фоновое задание. Посмотрим, как этого избежать:

  1. Всегда устанавливайте таймаут. Не оставляйте этот параметр пустым. Оптимально — от 30 до 60 секунд для обычных запросов.
  2. Используйте попытку. Любое HTTPСоединение и ВызватьHTTPМетод должны быть обернуты в блок Попытка ... Исключение. Это позволит вашей системе продолжать работу, даже если сервер обмена временно недоступен.
  3. Анализируйте коды состояния. Не считайте, что любой ответ сервера — это успех. Код 200 — это «ОК», но 401 (ошибка авторизации), 404 (неверный адрес публикации) или 500 (ошибка на стороне сервера-приемника) требуют разной реакции от программы.

Взаимодействие с системным администратором

Чтобы обмен заработал «в боевых условиях», нам нужно подготовить список вопросов для администратора:

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

← На главную