Загрузка файла с потоковой передачей WCF, крошечные чтения из потока

Я реализовал загрузку файлов с использованием потоковой передачи WCF. Все работает, как и ожидалось, однако я столкнулся с одной проблемой: я выделяю 4 КБ буфера для чтения из входящего потока, но WCF читает только 255 байтов. Вот моя функция загрузки:

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};
        }

Только 255 байт читает в этой строке: while ((count = inStream.Read(buffer, 0, buffer.Length)) > 0). Есть ли какие-либо настройки, которые я могу изменить, или я делаю что-то не так?

2 ответа

Я думаю, что у тебя была та же проблема, что и у меня. Я решил это здесь: загрузка файла через WCF медленнее, чем через IIS

Выложите свои конфиги, если можете, пожалуйста. Конфигурация должна указывать значения по умолчанию или переопределенные значения, как показано ниже:

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

Попробуйте этот MSDN Link, парень упоминает, что у него была та же проблема с получением только 255 байтов, у него есть помеченный ответ, и, кажется, он решает его проблему. Говорится:

"Чтобы передать поток методу WCF, параметр Stream должен быть единственным параметром в операции (или в теле сообщения)..."

Другие вопросы по тегам