2009-10-20 5 views
2

J'ai implémenté le téléchargement de fichiers en utilisant le streaming de WCF. Tout fonctionne comme prévu, mais j'ai fait face à un problème: j'alloue 4 Ko de mémoire tampon pour lire le flux entrant, mais WCF ne lit que 255 octets. Voici ma fonction de téléchargement:Téléchargement d'un fichier avec le streaming WCF, lecture minuscule à partir du flux

public UploadResponse UploadFile(FileDto fileDto) 
     { 
      using (var inStream = fileDto.FileStream) 
      using (var outStream = new FileStream("OutFile.txt", FileMode.Create)) 
      { 
       var buffer = new byte[4096]; 
       int count; 
       while ((count = inStream.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        outStream.Write(buffer, 0, count); 
       } 
      } 
      return new UploadResponse {DocumentId = -1}; 
     } 

seulement 255 octets de lecture sur cette ligne: while ((count = inStream.Read (buffer, 0, buffer.Length))> 0). Y at-il un réglage que je peux changer, ou est-ce que je fais quelque chose de mal?

+0

pouvez-vous poster votre configuration wcf –

+0

et votre contrat de service, aussi, s'il vous plaît - merci! –

+0

Avez-vous trouvé la solution? –

Répondre

1

Postez vos configs si vous le pouvez. La configuration doit spécifier les valeurs par défaut ou les valeurs outrepassée, quelque chose comme ci-dessous:

<binding name="FileTransferServicesBinding" 
    maxReceivedMessageSize="1048576" messageEncoding="Mtom"> 
     <readerQuotas maxArrayLength="1048576" maxBytesPerRead="1048576" 
    maxNameTableCharCount="1048576" maxStringContentLength="1048576"> </readerQuotas> 
    </binding> 

Essayez ce MSDN Link le gars mentionne qu'il a eu le même problème avec seulement obtenir 255 octets, il a une réponse marquée et il semble résoudre son problème. Il déclare:

« Pour passer un courant à une méthode WCF, le paramètre Stream doit être le seul paramètre dans l'opération (ou dans le corps du message) ... »

+0

Je n'ai pas essayé readerQuotas. Merci pour l'échantillon. Je vais essayer et revenir avec des résultats. –

+0

La valeur par défaut pour maxBytesPerRead est 4096, donc je ne suis pas si sûr que ça va être le problème. –

+0

Vérifiez les liens dans mon post ici: http://stackoverflow.com/questions/898168/supported-bindings-for-wcf-streaming-transfers/911371#911371 – Tanner