Почему возникает ошибка 406 при работе с HTTP-сервисом в 1С и как ее исправить?

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

Ошибка с кодом 406 (Not Acceptable) при обращении к HTTP-сервису 1С, опубликованному на IIS, является довольно специфичной. Она сигнализирует о том, что веб-сервер не может сформировать ответ, который удовлетворял бы клиента, или же столкнулся с внутренним сбоем в управлении сессиями. В рамках данной статьи мы разберем, как диагностировать эту проблему и какие шаги предпринять для ее устранения.

Шаг 1. Первичная диагностика и экстренные меры

Как показывает практика, зачастую проблема кроется в зависании рабочих процессов или переполнении пула соединений на стороне сервера 1С. Если сервис работал стабильно, а затем внезапно начал выдавать 406 ошибку, первое, что нам нужно сделать — это произвести сброс.

Рассмотрим последовательность действий:

  1. Выполните рестарт службы «Сервер 1С:Предприятия». Это очистит зависшие сессии и освободит занятые ресурсы.
  2. Если проблема сохраняется, выполните рестарт пула приложений (AppPool) в диспетчере IIS.
  3. В крайнем случае, произведите перезагрузку самого сервера.

Чаще всего эти действия позволяют восстановить работоспособность сервиса без глубокого вмешательства в настройки конфигурации.

Шаг 2. Анализ настроек публикации в файле default.vrd

Если рестарт помогает лишь временно, необходимо проанализировать параметры публикации вашего сервиса. Часто ошибка возникает из-за нехватки ресурсов пула соединений. Разберем, как правильно настроить параметры в файле default.vrd.

Откройте файл default.vrd в папке публикации вашего веб-сервиса. Убедитесь, что для вашего httpServices корректно заданы параметры. Если описание сервиса отсутствует, добавьте его вручную в блок httpServices.

Пример структуры файла 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="/my_service" ib="Srvr="Server";Ref="BaseName";">
    <httpServices>
        <service name="MyService" rootUrl="my_service" poolSize="20" poolTimeout="60"/>
    </httpServices>
</point>

Разберем параметры, которые влияют на стабильность работы:

Шаг 3. Диагностика через журналы событий

Чтобы понять точную причину ошибки 406, нам необходимо заглянуть в логи. IIS записывает все неудачные запросы в свои лог-файлы.

Проанализируем следующие моменты:

  1. Откройте папку логов IIS (обычно C:\inetpub\logs\LogFiles).
  2. Найдите поле sc-status с кодом 406.
  3. Посмотрите поле time-taken. Если это значение превышает установленный вами poolTimeout, это прямое указание на нехватку ресурсов пула.

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

Шаг 4. Устранение коллизий при использовании расширений

Так как вы упомянули, что HTTP-сервис реализован в расширении, важно учитывать особенности работы платформы:

Во-первых, при обновлении конфигурации или расширения метаданные могут кэшироваться. Попробуйте выполнить перепубликацию. Для этого можно воспользоваться утилитой webinst или пересоздать публикацию через конфигуратор.

Во-вторых, проверьте отсутствие конфликтов типов данных. Ошибка 406 часто возникает, когда заголовок Accept в запросе клиента не соответствует Content-Type, который возвращает метод 1С. Убедитесь, что вызывающее приложение запрашивает именно тот формат (обычно application/json или application/xml), который ваш код явно прописывает в объекте HTTPОтвет.

Пример корректной отправки ответа из кода 1С:


Ответ = Новый HTTPОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(ДанныеJSON);

Подводя итог, можно сказать, что решение проблемы чаще всего лежит в плоскости обслуживания инфраструктуры: очистки пулов, увеличения poolSize и настройки таймаутов в default.vrd. Если же это не помогает, следует проверить корректность заголовков в запросах клиента и актуальность опубликованных файлов метаданных.

← На главную