Перейти к содержанию

BSL253 - Таймауты при работе с внешними ресурсами

Кратко

Таймауты при работе с внешними ресурсами

Идентификаторы

Поле Значение
Код правила BSL253
Совместимый псевдоним TimeoutsInExternalResources
Серьёзность WARNING
Без конфигурации Да
BSLLS JSON, режим ON без переопределений Да
Флаг реестра implemented Да
Теги robustness, performance

Флаг implemented отражает реестр и не подтверждает проверенное совпадение с BSLLS.

Поведение

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

Настройка и подавление

Код BSL### - основной стабильный идентификатор. Совместимый псевдоним принимается в select, ignore и совместимых блоковых комментариях.

[tool.onec-hbk-bsl]
select = ["BSL253"]
ignore = ["TimeoutsInExternalResources"]

Все три семейства подавлений работают для текущей строки и диапазона. Если открывающий комментарий стоит после кода, он действует только на эту строку. Используйте любой один вариант:

  • noqa:
Значение = "пример";  // noqa: BSL253
  • bsl-disable (совместимый вариант):
Значение = "пример";  // bsl-disable: BSL253
  • совместимый BSLLS-вариант:
Значение = "пример";  // BSLLS:TimeoutsInExternalResources-off

Если тот же открывающий комментарий стоит на отдельной строке, он начинает диапазон. Закройте его парным маркером того же семейства:

// noqa: BSL253
// код без этой диагностики
// noqa-enable: BSL253

// bsl-disable: BSL253
// код без этой диагностики
// bsl-enable: BSL253

// BSLLS:TimeoutsInExternalResources-off
// код без этой диагностики
// BSLLS:TimeoutsInExternalResources-on

Чтобы отключить правило до конца файла, не добавляйте закрывающий noqa-enable, bsl-enable или BSLLS:…-on.

Открывающий и закрывающий маркеры должны принадлежать одному семейству.

Описание диагностики

При работе с внешними ресурсами с помощью объектов WSОпределения, WSПрокси, HTTPСоединение, FTPСоединение следует задавать таймаут – предельное время ожидания выполнения операции. В противном случае, в результате бесконечного ожидания программа зависнет или часть функционала программы станет недоступна. Для ИнтернетПочтовыйПрофиль платформа устанавливает значение таймаута по умолчанию в 30 секунд, но, несмотря на это, стоит явно указывать значение таймаута при использовании.

Установка таймаута является защитой от целого ряда внешних факторов:

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

Примеры

Неправильно:

HTTPСоединение = Новый HTTPСоединение("zabbix.localhost", 80);

или

FTPСоединение = Новый FTPСоединение(Сервер, Порт, Пользователь, Пароль, Прокси, ПассивныйРежим);

Правильно:

HTTPСоединение = Новый HTTPСоединение("zabbix.localhost", 80,,,, 1);

или

ТаймаутСоединения = 180;
HTTPСоединение = Новый HTTPСоединение("zabbix.localhost", 80,,,, ТаймаутСоединения);

Источники