Cohérence du transfert de fichiers
BITS garantit que la version du fichier qu’elle transfère est cohérente en fonction de la taille et de l’horodatage du fichier, et non du contenu (BITS ne protège pas contre les attaques man-in-the-middle). Pour vérifier le contenu vous-même, vous pouvez utiliser la méthode IBackgroundCopyFile3 ::GetTemporaryName pour obtenir le nom du fichier qui contient le contenu téléchargé, vérifier le contenu à l’aide de votre propre mécanisme, puis appeler la méthode IBackgroundCopyFile3 ::SetValidationState pour indiquer à BITS si le contenu du fichier est valide. Si vous définissez l’état de validation sur faux et que le contenu provient du serveur d’origine, le travail passe à l’état d’erreur. Si le contenu provient d’un homologue, BITS télécharge le fichier à partir du serveur d’origine.
Pour les téléchargements, si la taille du fichier ou l’horodatage change pendant que BITS transfère le fichier, BITS redémarre le transfert de ce fichier uniquement. Par exemple, si le travail de téléchargement contient deux fichiers et que les fichiers sont mis à jour sur le serveur pendant que BITS transfère le deuxième fichier, BITS redémarre le transfert du deuxième fichier uniquement. Le premier fichier, déjà transféré avec succès, n’est pas mis à jour pour refléter les nouvelles modifications.
Notez que si vous possédez le fichier téléchargé à partir du serveur, vous devez créer une URL pour chaque nouvelle version du fichier. Si vous utilisez la même URL pour les nouvelles versions du fichier, certains serveurs proxy peuvent servir des données obsolètes à partir de leur cache, car ils ne vérifient pas avec le serveur d’origine si le fichier est obsolète.
Pour les chargements, si la taille du fichier ou l’horodatage change pendant le transfert de fichiers, BITS génère une erreur et le travail est placé dans l’état BG_JOB_STATE_ERROR.
BITS ne synchronise pas les demandes de transfert lorsqu’un ou plusieurs utilisateurs demandent que le même fichier soit transféré vers le même emplacement. BITS transfère le fichier pour chaque requête séparément.