2012-03-08 3 views
3

Je crée un service qui téléchargera des fichiers à partir d'un serveur, j'ai une connaissance limitée dans ce domaine et je demande des conseils sur les paramètres du service.WCF meilleure pratique/configuration pour les téléchargements en streaming

J'ai exclu la mise en mémoire tampon complète de fichiers en raison de l'utilisation de la mémoire qui aurait un impact sur le serveur.

Quelle liaison serait la mieux utilisée dans un WCF pour la diffusion en continu de téléchargements? wsHttpBinding, basicHttpBinding, netTcpBinding etc

et si ses ennuis pas trop vous pourriez écrire quelques lignes disant pourquoi votre réponse convient correctement la fonctionnalité? (donc j'apprendre de la réponse)

Merci

ry4n

(travaille actuellement sur VS2008)

également quel format serait la meilleure information retourné à consommer par Android?

Mise à jour * Plus d'info: Tailles de fichier: Entre 1 Mo et 1 Go, les téléchargements multiples simultanément.

Quelles configurations WCF devrais-je utiliser pour réaliser cette fonctionnalité?

+1

Je voudrais suggérer google apporte quelques bons liens - ce soit un candidat: http://www.codeproject.com/Articles/166763/WCF-Streaming-Upload-Download-Files-Over-HTTP – dice

+0

ou même mieux: http://blogs.msdn.com/b/endpoint/archive/2010/11/24/streaming-over-http-with-wcf.aspx;) – dice

+0

Je pense que ces exemples simples ne tiennent pas compte des faits , que les clients IIS et WCF aiment tamponner le fichier entier en mémoire, avant de l'envoyer/recevoir. Grâce à cela, nous avons notre propre infrastructure complexe pour télécharger/télécharger des fichiers, pour contourner ce problème. – Euphoric

Répondre

1

Mode non en continu: Pour la plupart des gens familiers avec WCF diront NetTcp avec TransferMode.Streamed, mais il y a de sérieux problèmes de performance avec cela. La diffusion en continu vous permettra d'héberger plus de téléchargements simultanés car la mémoire du serveur ne sera pas saturée mais WCF a une taille de blocs non prioritaire, il ralentit le téléchargement, un fichier de plus de 100Mo sera beaucoup plus lent que n'importe quelle autre méthode.

Je propose de mettre en œuvre Chunking méthode de méthode, comme

byte[] GetBytes(int chunkNumber); 

Du côté client, vous pouvez assembler les morceaux que vous téléchargez. Utilisez HttpBinding pour l'interopérabilité, puisque tout ce que vous transférez sont des octets, vous ne subirez pas trop de surcharge par rapport à la liaison NetTcp.