2010-07-24 5 views

Répondre

6

Il n'existe pas de "meilleure" méthode. S'il y en avait, il n'y aurait probablement qu'un seul moyen. Cela dépend vraiment de votre situation, de vos besoins et de vos priorités. Cela dit, j'utilise l'encodage Base64 chaque fois que je reçois parce que c'est amusant et facile! :)

+2

cette réponse m'a fait lol. – tster

1

J'ai récemment mis en œuvre cette aide d'un service WCF et a choisi d'utiliser Byte [] comme mode de transport le fichier, car il était assez simple à mettre en œuvre:

public byte[] DownloadFile(string fileName) 
{ 
    var stream = System.IO.File.OpenRead(fileName); 

    byte[] fileContent = new byte[stream.Length]; 
    stream.Read(fileContent, 0, fileContent.Length); 

    return fileContent; 
} 

L'exemple ci-dessus est simplifié que je ne porte pas de nom de fichier directement au service WCF, mais je suis sûr que vous avez l'idée générale =)

2

Dans WCF, vous pouvez retourner un objet Stream à partir d'une méthode:

public Stream GetImage(string name) 
{ ... } 

Si vous avez un protocole SOAP pur, vous devrez vous en tenir à des primitives comme byte []. C'est une option peu performante mais il n'y a vraiment pas de meilleur moyen. Vous devrez peut-être segmenter le fichier en plusieurs parties pour que cela fonctionne pour tous les clients. Certains clients SOAP n'autorisent pas les grosses réponses, donc nous avons utilisé la réponse en morceaux de 30k.

La meilleure façon de transférer l'image est de ne pas utiliser l'une des approches ci-dessus, plutôt d'effectuer une requête HTTP directement sur l'image et d'éviter tout cela. C'est ce que nous utilisons maintenant, pas d'encodage, pas de traitement client, diffusé directement sur disque. Vous devrez examiner votre cas d'utilisation spécifique pour déterminer si cela peut être appliqué.

0

Vous pouvez également renvoyer uniquement l'URL de l'image, puis laisser le client effectuer un appel HTTP brut à l'URL renvoyée pour extraire l'image.

Merci
VM

+0

pas si c'est sur le transfert de l'image à un autre serveur/service – BerggreenDK

Questions connexes