2010-03-08 4 views
2

Notre système est conçu pour être déployé dans des régions présentant des connexions réseau non fiables et/ou insuffisantes. Nous construisons nos propres services de réplication de données tolérant les défaillances qui utilisent BITS. En raison de certaines exigences de sécurité et de maintenance, nous avons implémenté notre propre service de téléchargement de fichiers ASP.NET du côté du serveur, au lieu de simplement laisser IIS en charge les fichiers. Lorsque le client BITS effectue une requête de téléchargement HTTP avec la plage spécifiée du fichier, notre page ASP.NET extrait le segment de fichier demandé en mémoire et le remplace par la réponse HTTP. C'est la théorie. ;) Cette théorie échoue dans les scénarios de laboratoire artificiels, mais je ne laisserais pas le système se déployer dans des scénarios de la vie réelle à moins que nous puissions surmonter cela.Le client BITS ne parvient pas à spécifier l'en-tête de plage HTTP

Scénario de laboratoire: J'ai le client BITS et l'IIS sur la même machine de développement, donc j'ai pratiquement une énorme "bande passante" réseau et BITS est assez intelligent pour détecter cela. Comme le client BITS découvre la bande passante illimitée, il devient de plus en plus "gourmand". A chaque requête HTTP, BITS veut saisir de plus en plus de gammes de fichiers (il s'agit de télécharger des fichiers iso CD, des vidéos), exigeant 20-40 Mo dans une seule requête HTTP, taille que je ne suis pas à l'aise de mémoriser sur le côté serveur comme un aller. Je peux surmonter cela simplement en donnant moins que demandé. C'est bon.

Cependant, BITS devient vraiment « confiant » et « arrogant » exigeant des fichiers sans spécifier la plage de téléchargement, à savoir, il veut que le dossier complet en une seule demande, et c'est là que les choses vont mal. Je ne sais pas comment répondre à cette réponse dans le cas d'un fichier de 600 Mo. Si je fournis simplement la plage de démarrage de 1 Mo du fichier, le client BITS continue d'envoyer des requêtes HTTP pour le même fichier sans plage de téléchargement pour continuer, cela martèle le fait qu'il veut le fichier entier en une fois. Comme je suis réticent à fournir l'intégralité du fichier, BITS abandonne après plusieurs essais et signale des erreurs.

Des pensées?

Répondre

2

Il semblerait que nous puissions résoudre le problème. Il y a plusieurs choses:

  • Nous avions besoin d'avoir le contrôle sur chaque requête entrante, donc nous ne pouvions pas laisser IIS gérer la requête seule. Cependant, il n'est toujours pas nécessaire de mettre les fichiers en mémoire juste pour faciliter le téléchargement: Request.TransferFile (...) fait tout le travail lourd sans tirer les fichiers en mémoire, alors que nous gardons toujours le contrôle sur la gestion de la requête.
  • L'implémentation de BITS semble très intelligente pour gérer différents cas. Nous avons appris si BITS demande le fichier complet sans plage spécifiée, même s'il s'agit de plusieurs Go, nous pouvons simplement le laisser l'avoir. Dès qu'il reçoit les premiers paquets HTTP et se rend compte qu'il est plus grand qu'il ne pourrait l'avaler, il annule immédiatement la demande et la re-demande avec la plage appropriée.
  • BITS permet de configurer la bande passante maximale et de planifier quand il est autorisé à utiliser les ressources réseau. Bien que cette configuration soit applicable du côté client, elle est correcte dans notre cas particulier.
+0

merci pour le partage de cette information. –

Questions connexes