Рекомендации по использованию BITS

В этом разделе содержатся сведения, которые следует учитывать при разработке приложения, использующего BITS.

Контекст пользователя или контекст службы

BITS передает файлы только при входе владельца задания на компьютер (пользователь должен войти в систему в интерактивном режиме). BITS не поддерживает команду RunAs . Дополнительные сведения см. в разделе "Пользователи и сети" Подключение ions.

Если для приложения не требуется контекст пользователя, попробуйте создать службу, запущенную как LocalSystem, LocalService или NetworkService. Эти системные учетные записи всегда вошли в систему, поэтому передача не распространяется на пользователя. Однако если при создании задания олицетворить пользователя, применяются правила интерактивного входа. Дополнительные сведения см. в разделе "Учетные записи службы" и "BITS".

Задания являются постоянными

Задания остаются в очереди, пока не вызовете метод IBackgroundCopyJob::Complete или IBackgroundCopyJob::Cancel. Файлы в задании недоступны пользователю до вызова Complete. Как правило, вы вызываете Complete, когда состояние задания BG_JOB_STATE_TRANSFERRED, и вы вызываете отмену, когда задание находится в состоянии BG_JOB_STATE_TRANSIENT_ERROR или BG_JOB_STATE_ERROR и больше не может выполнять ход выполнения.

Если метод Complete или метод Cancel не вызывается в течение 90 дней (политика группы JobInactivityTimeout по умолчанию), служба отменяет задание. Для очистки заданий всегда следует вызывать метод Complete или Cancel , а не полагаться на политику JobInactivityTimeout. Задания, оставшиеся в очереди, могут препятствовать созданию других заданий, если достигнуто ограничение политики MaxJobsPerUser или MaxJobsPerMachine.

Когда следует использовать приоритет переднего плана или фона

Если задание не является критически важным или пользователь активно ожидает, всегда следует использовать фоновый приоритет. Однако иногда может потребоваться переключиться с фонового приоритета на приоритет переднего плана, например, если прокси-сервер не поддерживает заголовок Content-Range или антивирусное программное обеспечение на клиенте удаляет запрос заголовка диапазона. Переключение на приоритет переднего плана работает только для тех файлов, размер файла которых меньше 2 ГБ. Пример см. в реализации метода IBackgroundCopyCallback::JobError. Кроме того, обратите внимание, что если задание переднего плана будет прервано из-за отключения сети или выхода пользователя, задание завершится ошибкой, так как BITS отправит запрос диапазона, чтобы попытаться перезапустить передачу, из которой она ушла.

Начиная с Windows 8, необходимо настроить задания загрузки с помощью BITS_JOB_PROPERTY_DYNAMIC_CONTENT и BG_JOB_PRIORITY_FOREGROUND при нацеливанию серверов, которые не соответствуют требованиям HTTP для загрузки BITS. Помните, что это приведет к перезапуску загрузки BITS с самого начала, если он когда-либо прерывается (например, из-за проблем с подключением или перезагрузки системы).

Сведения о доступных приоритетах и о том, как BITS использует уровень приоритета для планирования заданий, см . в BG_JOB_PRIORITY.

Временные и неустранимые ошибки

Некоторые ошибки можно восстановить, а некоторые — нет. Например, ошибка "Сервер недоступен" является ошибкой, доступной для восстановления, и ошибка "Отказано в доступе" является неустранимой ошибкой. BITS помещает восстанавливаемые ошибки в временное состояние ошибки и пытается выполнить задание снова после указанного интервала. Если задание не удается выполнить, BITS перемещает задание в неустранимое состояние ошибки. Используйте методы IBackgroundCopyJob::SetMinimumRetryDelay и IBackgroundCopyJob::SetNoProgressTimeout, чтобы управлять тем, как BITS обрабатывает временные ошибки.

Для заданий переднего плана необходимо ограничить время, которое позволить заданию оставаться в временном состоянии ошибки и пытаться восстановить. Используйте метод SetNoProgressTimeout, чтобы ограничить время пребывания задания в временном состоянии ошибки или принудительного выполнения задания в состояние неустранимой ошибки. Если задание попытается восстановиться, следует использовать метод SetMinimumRetryDelay , чтобы задать минимальную задержку повторных попыток в 60 секунд или вызвать метод IBackgroundCopyJob::Resume , чтобы активировать задание снова.

Дополнительные сведения см. в разделе BG_JOB_STATE, жизненный цикл задания BITS и обработка ошибок.

Измерение использования пропускной способности сети

BITS может использовать сетевой адаптер клиента для оценки доступной пропускной способности сети. Так как BITS не может измерять пропускную способность за пределами клиента, BITS может захватить канал глобальной сети. Чтобы уменьшить перегрузку по каналу глобальной сети, можно использовать групповую политику MaxInternetBandwidth , чтобы ограничить объем пропускной способности, используемой клиентом. Дополнительные сведения см. в разделе " Пропускная способность сети" и "Групповые политики".

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

Настройка учетных данных для проверки подлинности прокси-сервера и прокси-сервера

Если вы ожидаете, что прокси-сервер требует учетных данных пользователя, необходимо указать учетные данные BITS. Чтобы указать учетные данные, вызовите метод IBackgroundCopyJob2::SetCredentials . BITS поддерживает схемы проверки подлинности Basic, Digest, Negotiate, NTLM и Passport.

Дополнительные сведения о проверке подлинности см. в разделе "Проверка подлинности".

Указание параметров прокси-сервера для учетных записей пользователей и учетных записей служб

По умолчанию BITS использует параметры прокси-сервера Обозреватель пользователя. Чтобы переопределить параметры прокси-сервера Обозреватель пользователя, вызовите метод IBackgroundCopyJob::SetProxy Параметры.

Параметры прокси-сервера в Интернете Обозреватель не применяются к системным учетным записям, поэтому поведение прокси-сервера по умолчанию (BG_JOB_PROXY_USAGE_PRECONFIG) будет работать только в развертываниях протокола автоматического обнаружения веб-прокси (WPAD), если не предприняты дополнительные действия по настройке. Если приложение является службой, работающей как LocalSystem, LocalService или NetworkService, рассмотрите возможность настройки вспомогательного маркера для заданий BITS или явное задание правильных параметров прокси-сервера путем вызова IBackgroundCopyJob::SetProxy Параметры с BG_JOB_PROXY_USAGE_OVERRIDE. В качестве альтернативы можно использовать переключатели /Util /SetIEProxy Bits Администратор.exe чтобы задать параметры прокси-сервера Интернета Обозреватель для учетной записи системы LocalSystem, LocalService или NetworkService. Дополнительные сведения см. в разделе Bits Администратор Tool.

BITS не распознает параметры прокси-сервера, заданные с помощью файла Proxycfg.exe.

Начиная с обновление Windows 10 за октябрь 2018 г. (10.0; Сборка 17763), BITS использует тот же порядок прокси-сервера, что и WinHttp с AUTOMATIC_PROXY. BITS использует это более совместимое упорядочивание при указании BG_JOB_PROXY_USAGE_PRECONFIG. BG_JOB_PROXY_USAGE_PRECONFIG — это значение по умолчанию для указания прокси-сервера HTTP.

Указание параметров, связанных с пользователем для проверки подлинности прокси-серверов

Если вы используете BITS в среде, требующей проверки подлинности прокси-сервера во время выполнения в качестве учетной записи без учетных данных NTLM или Kerberos в сетевом домене компьютера, необходимо выполнить дополнительные действия для правильной проверки подлинности с помощью учетных данных другой учетной записи пользователя, которая имеет учетные данные в домене. Это типичный сценарий, когда код BITS выполняется как системная служба, например LocalService, NetworkService или LocalSystem, так как эти учетные записи не имеют доступных учетных данных NTLM или Kerberos.

Дополнительные сведения о том, как работает проверка подлинности в этом сценарии, см. в разделе "Проверка подлинности".

Масштабируемость

Если более 100 заданий находятся в очереди, производительность может начать уменьшаться в зависимости от композиции задания. BITS использует параметр политики MaxJobsPerMachine для ограничения количества заданий в очереди. Приложения должны ограничить число своих заданий около 10, чтобы несколько приложений имели меньше шансов превышать 100 заданий. Как правило, приложение с большим количеством заданий для отправки сначала отправляет 10 заданий, а затем отправляет по одному по мере завершения каждого задания.

Количество файлов в задании также должно быть ограничено не более 10 файлов. Если вы хотите передать большое количество файлов для задания, попробуйте создать CAB-файл, содержащий все файлы.

Заголовки HTTP могут быть в любом случае

Стандарты HTTP всегда говорили, что заголовки HTTP должны рассматриваться как нечувствительные к регистру (RFC 7230, раздел 3.2). Последний стандарт HTTP, RFC 7540, идет дальше и говорит, что трафик HTTP/2 должен сравнить заголовки как без учета регистра и должен представлять заголовки в нижнем регистре (RFC 6540, раздел 8.1.2). Даже если трафик отправляется с заголовками нижнего регистра, прокси-серверы могут также принудительно заставить заголовки в нижний регистр.

Избегайте личных сведений (PII)

Задания BITS, включая отображаемое имя задания и описание и имена файлов, отображаются всем пользователям с правами администратора. Их также можно добавить в телеметрия Windows. Не следует помещать конфиденциальные данные (например, имя пользователя) в сведения о задании.