Meilleures pratiques lors de l’utilisation de BITS
Cette section contient des informations à prendre en compte lors de la conception d’une application qui utilise BITS.
Contexte utilisateur ou contexte de service
BITS transfère des fichiers uniquement lorsque le propriétaire du travail est connecté à l’ordinateur (l’utilisateur doit s’être connecté de manière interactive). BITS ne prend pas en charge la commande RunAs . Pour plus d’informations, consultez Utilisateurs et connexions réseau.
Si vous n’avez pas besoin du contexte d’un utilisateur pour votre application, envisagez plutôt d’écrire un service s’exécutant en tant que LocalSystem, LocalService ou NetworkService. Ces comptes système étant toujours connectés, le transfert n’est pas soumis à la déconnexion d’un utilisateur. Toutefois, si vous empruntez l’identité d’un utilisateur lorsque vous créez le travail, les règles d’ouverture de session interactives s’appliquent. Pour plus d’informations, consultez Comptes de service et BITS.
Les travaux sont persistants
Les travaux restent dans la file d’attente jusqu’à ce que vous appeliez la méthode IBackgroundCopyJob::Complete ou IBackgroundCopyJob::Cancel . Les fichiers du travail ne sont pas disponibles pour l’utilisateur tant que vous n’avez pas appelé Terminé. En règle générale, vous appelez Terminé lorsque l’état du travail est BG_JOB_STATE_TRANSFERRED, et vous appelez Annuler lorsque le travail est à l’état BG_JOB_STATE_TRANSIENT_ERROR ou BG_JOB_STATE_ERROR et ne peut plus progresser.
Si vous n’appelez pas la méthode Complete ou la méthode Cancel dans les 90 jours (JobInactivityTimeout par défaut stratégie de groupe), le service annule le travail. Vous devez toujours appeler la méthode Complete ou Cancel et ne pas vous fier à la stratégie JobInactivityTimeout pour nettoyer vos travaux. Les travaux laissés dans la file d’attente peuvent empêcher les utilisateurs de créer d’autres travaux si la limite de stratégie MaxJobsPerUser ou MaxJobsPerMachine est atteinte.
Quand utiliser la priorité de premier plan ou d’arrière-plan
Sauf si le travail est critique ou que l’utilisateur attend activement, vous devez toujours utiliser une priorité d’arrière-plan. Toutefois, il arrive que vous souhaitiez passer de la priorité d’arrière-plan à la priorité de premier plan, par exemple, lorsque le proxy ou le serveur ne prend pas en charge l’en-tête Content-Range, ou lorsque le logiciel antivirus sur le client supprime la demande d’en-tête de plage. Le passage à la priorité de premier plan fonctionne uniquement pour les fichiers dont la taille de fichier est inférieure à 2 Go. Pour obtenir un exemple, consultez l’implémentation de la méthode IBackgroundCopyCallback::JobError . Notez également que si le travail de premier plan est ensuite interrompu en raison d’une déconnexion du réseau ou de la déconnexion de l’utilisateur, le travail échoue, car BITS envoie une demande de plage pour essayer de redémarrer le transfert à partir de l’endroit où il s’est arrêté.
À compter de Windows 8, vous devez configurer les travaux de téléchargement avec BITS_JOB_PROPERTY_DYNAMIC_CONTENT et BG_JOB_PRIORITY_FOREGROUND lorsque vous ciblez des serveurs qui ne répondent pas aux exigences HTTP pour les téléchargements BITS. Gardez à l’esprit que bits devra redémarrer le téléchargement dès le début s’il est interrompu (par exemple, en raison de problèmes de connectivité ou de redémarrage du système).
Pour plus d’informations sur les priorités disponibles et sur la façon dont BITS utilise le niveau de priorité pour planifier des travaux, consultez BG_JOB_PRIORITY.
Erreurs temporaires et irrécupérables
Certaines erreurs peuvent être récupérées et d’autres ne le sont pas. Par exemple, l’erreur « Le serveur n’est pas disponible » est une erreur récupérable et l’erreur « Accès refusé » est une erreur irrécupérable. BITS place les erreurs récupérables dans un état d’erreur temporaire et tente à nouveau le travail après un intervalle spécifié. Si le travail ne parvient pas à progresser, BITS le déplace vers un état d’erreur irrécupérable. Utilisez les méthodes IBackgroundCopyJob::SetMinimumRetryDelay et IBackgroundCopyJob::SetNoProgressTimeout pour contrôler la façon dont BITS traite les erreurs temporaires.
Pour les travaux de premier plan, vous devez limiter la durée pendant laquelle vous laissez un travail rester dans l’état d’erreur temporaire et essayez de récupérer. Utilisez la méthode SetNoProgressTimeout pour limiter la durée pendant laquelle un travail reste à l’état d’erreur temporaire ou pour forcer le travail à l’état d’erreur irrécupérable. Si vous laissez le travail essayer de récupérer, vous devez utiliser la méthode SetMinimumRetryDelay pour définir le délai minimal de nouvelle tentative sur 60 secondes ou appeler la méthode IBackgroundCopyJob::Resume pour réactiver le travail.
Pour plus d’informations, consultez BG_JOB_STATE, Cycle de vie d’un travail BITS et Gestion des erreurs.
Mesure de l’utilisation de la bande passante réseau
BITS peut utiliser la carte réseau du client pour estimer la bande passante réseau disponible. Comme BITS n’est pas en mesure de mesurer la bande passante au-delà du client, BITS peut congestionner la liaison WAN. Pour réduire la congestion sur la liaison WAN, vous pouvez utiliser la stratégie de groupe MaxInternetBandwidth pour limiter la quantité de bande passante utilisée par le client. Pour plus d’informations, consultez Bande passante réseau et stratégies de groupe.
Si vous écrivez une application que de nombreux clients utiliseront pour télécharger des fichiers à partir d’un serveur donné, vous devez envisager un schéma qui étale les demandes de téléchargement afin de ne pas surcharger le serveur de requêtes.
Définition des informations d’identification pour l’authentification du proxy et du serveur
Si vous vous attendez à ce que le proxy ou le serveur exige des informations d’identification utilisateur, vous devez fournir les informations d’identification à BITS. Pour spécifier les informations d’identification, appelez la méthode IBackgroundCopyJob2::SetCredentials . BITS prend en charge les schémas d’authentification De base, Digest, Negotiate, NTLM et Passport.
Pour plus d’informations sur l’authentification, consultez Authentification.
Spécification des paramètres de proxy pour les comptes d’utilisateur et les comptes de service
Par défaut, BITS utilise les paramètres de proxy Internet Explorer de l’utilisateur. Pour remplacer les paramètres de proxy Internet Explorer de l’utilisateur, appelez la méthode IBackgroundCopyJob::SetProxySettings.
Les paramètres de proxy Internet Explorer ne s’appliquent pas aux comptes système, de sorte que le comportement de proxy par défaut (BG_JOB_PROXY_USAGE_PRECONFIG) ne fonctionnera correctement que dans les déploiements WPAD (Web Proxy Auto-Discovery Protocol), sauf si des étapes de configuration supplémentaires sont effectuées. Si votre application est un service exécuté en tant que LocalSystem, LocalService ou NetworkService, envisagez de configurer un jeton d’assistance sur vos travaux BITS ou de définir explicitement les paramètres de proxy appropriés en appelant IBackgroundCopyJob::SetProxySettings avec BG_JOB_PROXY_USAGE_OVERRIDE. Vous pouvez également utiliser les commutateurs /Util /SetIEProxy de BitsAdmin.exe pour définir les paramètres de proxy Internet Explorer pour le compte système LocalSystem, LocalService ou NetworkService. Pour plus d’informations, consultez BitsAdmin Tool.
BITS ne reconnaît pas les paramètres de proxy définis à l’aide du fichier Proxycfg.exe.
À compter du Mise à jour d'octobre 2018 de Windows 10 (10.0 ; Build 17763), BITS utilise le même ordre de proxy que WinHttp avec AUTOMATIC_PROXY. BITS utilise ce classement plus compatible quand BG_JOB_PROXY_USAGE_PRECONFIG est spécifié. BG_JOB_PROXY_USAGE_PRECONFIG est la valeur par défaut pour spécifier le proxy HTTP.
Spécification de paramètres spécifiques à l’utilisateur pour l’authentification des proxys
Si vous utilisez BITS dans un environnement qui nécessite l’authentification proxy tout en exécutant en tant que compte sans informations d’identification NTLM ou Kerberos utilisables dans le domaine réseau de l’ordinateur, vous devez prendre des mesures supplémentaires pour vous authentifier correctement en utilisant les informations d’identification d’un autre compte d’utilisateur disposant d’informations d’identification sur le domaine. Il s’agit d’un scénario classique lorsque votre code BITS s’exécute en tant que service système tel que LocalService, NetworkService ou LocalSystem, car ces comptes ne disposent pas d’informations d’identification NTLM ou Kerberos utilisables.
Pour plus d’informations sur le fonctionnement de l’authentification dans ce scénario, consultez Authentification.
Extensibilité
Si plus de 100 travaux sont dans la file d’attente, les performances peuvent commencer à diminuer en fonction de la composition du travail. BITS utilise le paramètre de stratégie MaxJobsPerMachine pour imposer une limite matérielle au nombre de travaux dans la file d’attente. Les demandes doivent limiter le nombre de leurs travaux à environ 10, de sorte que plusieurs demandes auront moins de chances de dépasser la ligne directrice de 100 emplois. En règle générale, une application avec un grand nombre de travaux à soumettre soumettait d’abord 10 travaux, puis un à la fois à la fin de chaque travail.
Le nombre de fichiers dans le travail doit également être limité à un maximum de 10 fichiers. Si vous souhaitez transférer un grand nombre de fichiers pour un travail, envisagez plutôt de créer un fichier CAB qui contient tous les fichiers.
Les en-têtes HTTP peuvent être dans tous les cas
Les normes HTTP ont toujours dit que les en-têtes HTTP doivent être traités comme respectant la casse (RFC 7230, section 3.2). La norme HTTP la plus récente, RFC 7540, va plus loin et indique que le trafic HTTP/2 doit comparer les en-têtes qui ne respectent pas la casse et doit présenter les en-têtes en minuscules (RFC 6540, section 8.1.2). Même lorsque le trafic est envoyé avec des en-têtes non minuscules, les proxys peuvent très bien choisir de forcer les en-têtes en minuscules.
Éviter les informations d’identification personnelle (PII)
Les travaux BITS, y compris le nom d’affichage et la description du travail, ainsi que les noms de fichiers, sont visibles par tous les utilisateurs disposant de privilèges d’administrateur. Ils peuvent également être ajoutés à Windows Telemetry. Vous devez éviter d’insérer des données sensibles (comme le nom de l’utilisateur) dans les détails du travail.