2010-08-30 3 views
0

J'ai un service Web WCF qui renvoie un flux. Du coté du client quand j'essaye de le lire en utilisant le code ci-dessous, j'obtiens une exception à la ligne "Byte [] buffer = new Byte [outputMessage.FileByteStream.Length];" disant System.Notsupported. S'il vous plaît me conseiller sur ce que je fais mal ici.Exception WCF lors de l'obtention de la longueur du flux

 FileMetaData metaData = new FileMetaData(); 
     metaData.ProductIDsArray = new string[] { "1", "2" }; 
     metaData.AuthenticationKey = "test"; 
     FileDownloadMessage inputParam = new FileDownloadMessage(metaData); 
     FileTransferServiceClient obj = new FileTransferServiceClient(); 
     FileDownloadReturnMessage outputMessage = obj.DownloadFile(inputParam); 
     Byte[] buffer = new Byte[outputMessage.FileByteStream.Length]; 
     int byteRead = outputMessage.FileByteStream.Read(buffer, 0, buffer.Length); 
     Response.Buffer = false; 

     Response.Buffer = false; 
     Response.ContentType = "application/x-zip"; 
     Response.AppendHeader("content-length", buffer.Length.ToString()); 
     Stream outStream = Response.OutputStream; 


     while (byteRead > 0) 
     { 
      outStream.Write(buffer, 0, buffer.Length); 
      byteRead = outputMessage.FileByteStream.Read(buffer, 0, buffer.Length); 
     } 
     outputMessage.FileByteStream.Close(); 
     outStream.Close(); 
+1

C'est un code très étrange. Pourquoi utilisez-vous le cycle while pour lire le flux lorsque vous l'avez déjà fait? –

+0

Oui, je ne suis pas en désaccord avec vous car je suis très nouveau à ce sujet. S'il vous plaît pouvez-vous me suggérer une meilleure façon de faire la même chose. Merci – Amit

Répondre

3

Le flux que vous lisez ne supporte pas obtenir la longueur du cours d'eau (très probablement parce que la longueur ne sera pas connu tant que le fichier entier a été téléchargé). Lisez le flux en morceaux - comme le fait la boucle while, mais avec un tampon de taille fixe - une fois que vous aurez obtenu 0 pour byteRead, vous saurez que vous avez atteint la fin du flux.

+0

merci pour la réponse. Quelle taille dois-je donner à bytearray? Je ne connaîtrai pas la taille du fichier que je recevrai il peut être 10 mb il peut être 500 mb. s'il vous plaît donnez votre avis – Amit

Questions connexes