Работа с HTTP-сервисами в системе 1С:Предприятие является стандартом для интеграции с внешними системами: интернет-магазинами, мессенджерами или сервисами обратного звонка (например, JivoChat). Однако процесс первичной настройки часто вызывает вопросы, связанные с правами доступа, установкой компонент и сетевой безопасностью. В этой статье мы подробно разберем, как подготовить инфраструктуру, опубликовать сервис и убедиться в его работоспособности.
Разберем фундаментальный вопрос: может ли HTTP-сервис работать сам по себе? В классической архитектуре 1С — нет. Для того чтобы внешняя система могла «достучаться» до вашей базы, необходим посредник, который принимает входящие HTTP-запросы и передает их платформе. Таким посредником выступает веб-сервер. Чаще всего используются Internet Information Services (IIS) на Windows или Apache на Windows/Linux.
Проанализируем альтернативу. Начиная с версии платформы 8.3.22, появился Автономный сервер (1C:Enterprise Autonomous Server). Это легкое решение, которое позволяет публиковать HTTP-сервисы без установки полноценного веб-сервера (IIS или Apache). Если ваша версия платформы ниже 8.3.22, использование стороннего веб-сервера является строго обязательным.
Рассмотрим ситуацию, когда при попытке опубликовать сервис в конфигураторе (Администрирование — Публикация на веб-сервере) возникают ошибки. Выясним их причины по шагам:
Модули расширения веб-сервера.Для исправления второй ошибки выполним следующие действия: запустим программу установки платформы (из панели управления или из дистрибутива), выберем режим «Изменить» и в дереве компонентов отметим галочкой Модули расширения веб-сервера. После завершения установки в Конфигураторе станет доступна возможность выбора веб-сервера для публикации.
Иногда визуальный интерфейс Конфигуратора может вводить в заблуждение, или нам нужно проверить настройки на сервере, к которому нет прямого доступа через GUI 1С. В этом случае проанализируем структуру конфигурационных файлов.
Для сервера IIS перейдем в каталог C:\inetpub\wwwroot\[ИмяВашейПубликации]. В этой папке должен находиться файл default.vrd. Это XML-документ, который управляет поведением публикации. Рассмотрим пример его содержимого для HTTP-сервисов:
<httpServices>
<service name="МойСервис"
rootUrl="my_service"
enable="true"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</httpServices>
Обратим внимание на важные параметры:
name — имя HTTP-сервиса, как оно задано в дереве метаданных.rootUrl — относительный путь, по которому сервис будет доступен в браузере.enable="true" — признак того, что сервис активен.reuseSessions — параметр повторного использования сеансов. Значение autouse позволяет значительно ускорить работу, так как 1С не будет создавать новый сеанс (и тратить лицензию) на каждый отдельный запрос, а будет брать свободный сеанс из пула.Для сервера Apache также следует проверить файл httpd.conf. В нем должны присутствовать строки, начинающиеся с LoadModule _1cws_module, которые указывают путь к библиотеке расширения 1С (например, wsap24.dll).
Допустим, нам нужно принимать уведомления (webhooks) от внешнего чата. Выясним, как обеспечить сетевую доступность. Если ваш сервер 1С находится внутри локальной сети и вы используете OpenVPN для работы, внешний сервис (JivoChat) не сможет просто так отправить вам данные, так как ваш внутренний IP-адрес недоступен из интернета.
Рассмотрим варианты решения:
Проанализируем технический нюанс, о котором часто забывают: разрядность. Если вы используете 64-битную операционную систему и 64-битный IIS, убедитесь, что вы установили 64-битные модули расширения 1С. В настройках пула приложений (Application Pool) в IIS есть параметр Разрешить 32-разрядные приложения. Если он установлен в False, а модули 1С у вас 32-битные — публикация работать не будет (вы увидите ошибку 500).
Для отладки кода HTTP-сервиса выполним следующие шаги:
default.vrd добавим в корневой тег <point> атрибут debug="true" и укажем адрес сервера отладки: debuggerURL="http://localhost:1560".Отладка по протоколу HTTP.Отладка — Подключение — Автоматическое подключение установим флажок HTTP-сервисы.Теперь при поступлении входящего запроса выполнение кода остановится на вашей точке останова, и вы сможете проанализировать содержимое объекта HTTPСервисЗапрос.
Важно помнить, что каждый активный сеанс HTTP-сервиса требует клиентскую лицензию 1С. Чтобы не исчерпать лимит лицензий при большом потоке запросов, обязательно настройте пул соединений в файле default.vrd. Параметр poolSize определяет максимальное количество сеансов, которые будут «висеть» в памяти в ожидании запросов. Если запросов приходит больше, чем размер пула, они будут выстроены в очередь на время, указанное в poolTimeout.
При использовании reuseSessions="dontuse" (как в исходном сообщении темы) на каждый запрос будет тратиться время на полноценный запуск сеанса, авторизацию пользователя и инициализацию параметров сеанса, что крайне неэффективно для высоконагруженных систем. Рекомендуем всегда переводить этот параметр в autouse после завершения первичной отладки.